在 Confluent Cloud 上使用 Kafka 时,我发现了一个奇怪的行为。我创建了一个具有默认分区值的主题:6。
我的系统由一个向该主题发送消息的 Java Producer 应用程序和一个从中读取并执行每个消息操作的 Kafka Streams 应用程序组成。
----------------------- -------- -----------
| Kafka Java Producer | ----> | topic | ----> | KStream |
----------------------- -------- -----------
目前我只启动 Kafka Streams 应用程序的一个实例,因此消费者组有一个成员。
这是我观察到的:
- 生产者发送一条消息,并将其记录在偏移量为 0的事件主题中:
- 消息到达 KStream,正在正确处理,正如我在 KStream 日志跟踪中看到的那样:
韩流
events.foreach { key, value ->
logger.info("--------> Processing TimeMetric {}", value)
//Store in DB
日志
[-StreamThread-1] uration$$EnhancerBySpringCGLIB$$e72e3f00 : --------> Processing Event {"...
- 在 Confluent Cloud 消费者滞后中,我可以看到所有消费者组及其状态。KStream 有一个名为
events-processor-19549050-d8b0-4b39...
. 如前所述,该组只有一个成员(KStream 的唯一实例)。但是,如果显示该组在分区 2 中的一条消息后面。此外,请注意当前偏移量似乎为 1,结束偏移量为 2):
- 如果我在生产者中发送另一条消息,它会再次记录在主题中,但这次使用偏移量 2 而不是 1:
- 消息到达KStream,再次正常处理:
[-StreamThread-1] uration$$EnhancerBySpringCGLIB$$e72e3f00 : --------> Processing Event {
- 回到消费者组的消费者滞后,它仍然落后一条消息,仍然有一些奇怪的偏移量(当前 3,结束 4):
尽管处理似乎很好,但上面显示的状态并没有多大意义。能否解释一下原因:
- 消息偏移量增加 +2 而不是 +1?
- 即使正确处理了消息,消费者组似乎也落后了 1 条消息?