【发布时间】:2021-10-09 13:24:04
【问题描述】:
让消费者始终阅读密钥的最后、最新消息的最佳解决方案是什么? kafka 有解决方案还是我需要 kafka 流?
一个例子:
带有键 K1-K3 的消息 m 在日志中:
|K1 m0 | K2 m1 | K3 m2 | K2 m3 | K1 m4 | K2 m5 | K1 m6 | K3 m7 | K1 m8| ...
---------------------------------------------------------------------------------> t
t1 t2
两个消费者使用密钥 K1 读取消息。消费者 1 从 t1 开始,消费者 2 从 t2 开始。我希望 consumer2 从 m6 开始读取。
消费者 1:m0、m4、m6、m8、... 消费者 2:m6、m8、...
我的两种方法:
- 使用 auto.offset.reset='latest'。这种方法有两个问题。第一个是kafka中通常有一个初始偏移量。所以不调用 auto.offset.reset 方法。如果我另外设置 enable_auto_commit=False,消费者 2 将以 m8 而不是 m6 开头。
- 使用特定偏移量启动消费者 2。在这里,我不知道从哪里获得正确的结束偏移量,尤其是考虑到键。对于这个例子,我需要“K1 m6”的偏移量。
【问题讨论】:
标签: apache-kafka kafka-consumer-api apache-kafka-streams