java - Kafka 作为数据库缓存
问题描述
我有 5 个 kafka 主题,每秒将发送 100 条消息。消息格式如下
{null,JSON}(分区:10)
我需要根据 JSON 中的值提取过去的记录并在我的 java 应用程序中处理。什么是正确的方法?
- ksqlDB 流
- 卡夫卡流
- 表
提前致谢。
解决方案
虽然可以将 Kafka 用作数据库,但我强烈建议您不要采用这种方法。Kakfa 是一个消息代理,所以如果你想查看过去的消息,你必须重新处理整个主题
您可能能够“优雅地”处理这种情况的唯一情况是,如果您知道消息的偏移量,那么您可以将您的消费者设置为直接去那里,但是由于您描述的用例,我不认为你拥有了它
我没有使用 ksqlDB,但它看起来像普通的 KQSL
KSQL 只是 Kafka Streams 之上的抽象,就像 Kafka Streams 是对消费者-生产者的抽象一样。每个抽象都有较少的功能
您可以使用任何您想要的方法来实现您的目标,请注意有几个因素会让您选择一个或另一个,例如
- KSQL 是最简单的方法,但您需要一个 KSQL 服务器
- (AFAIK) KSQL 不适用于所有序列化格式
- Kafka Streams 最适合您有 ETL 场景(从 Kafka 读取、处理消息、发送回 Kafka)
- 如果您需要完全控制流程,普通的消费者-生产者会给您
推荐阅读
- mysql - 从表的变量中获取值并插入到新表中,新表的额外变量不起作用?
- flutter - 我如何要求调用 dispose 方法?
- python - 自动编码器:输入形状不正确
- bash - 如何在给定目录中执行bash脚本
- laravel - 如何使用 laravel 和 pusher api 向特定用户广播事件?
- embedded - PIC32 和 LCD 之间的 I2C 通信
- xcode - 如何从 XCode 12.2 中删除重复的预览?
- python - 这个 Python 代码 (discord.py) 有什么问题?
- c# - SignalR 无法获取连接
- computer-science - owl:equivalentClass 和 rdfs;subClassOf 在制作 owl:Restrictions 时有什么区别