首页 > 解决方案 > Kafka 作为数据库缓存

问题描述

我有 5 个 kafka 主题,每秒将发送 100 条消息。消息格式如下

{null,JSON}(分区:10)

我需要根据 JSON 中的值提取过去的记录并在我的 java 应用程序中处理。什么是正确的方法?

  1. ksqlDB 流
  2. 卡夫卡流

提前致谢。

标签: javaapache-kafkaksqldb

解决方案


虽然可以将 Kafka 用作数据库,但我强烈建议您不要采用这种方法。Kakfa 是一个消息代理,所以如果你想查看过去的消息,你必须重新处理整个主题

您可能能够“优雅地”处理这种情况的唯一情况是,如果您知道消息的偏移量,那么您可以将您的消费者设置为直接去那里,但是由于您描述的用例,我不认为你拥有了它

我没有使用 ksqlDB,但它看起来像普通的 KQSL

KSQL 只是 Kafka Streams 之上的抽象,就像 Kafka Streams 是对消费者-生产者的抽象一样。每个抽象都有较少的功能

您可以使用任何您想要的方法来实现您的目标,请注意有几个因素会让您选择一个或另一个,例如

  • KSQL 是最简单的方法,但您需要一个 KSQL 服务器
  • (AFAIK) KSQL 不适用于所有序列化格式
  • Kafka Streams 最适合您有 ETL 场景(从 Kafka 读取、处理消息、发送回 Kafka)
  • 如果您需要完全控制流程,普通的消费者-生产者会给您

推荐阅读