从不同消费者群体的kafka分区读取消息时出现不一致

时间:2020-07-23 17:17:12

标签: apache-kafka kafka-consumer-api spring-kafka kafka-producer-api

我在kafka和2个使用它的消费群体中产生了消息。我面临的问题是:

  1. 两个使用者组使用的消息不一致:表示一个使用者组能够从分区-9读取消息,而另一个使用者组没有从同一分区读取消息。

可能是什么原因?

任何线索都将有所帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

这是卡夫卡消费者群体的正常行为:他们彼此完全独立。

想象有两个从同一个分区读取的不同消费者组。

  • 第一个必须阅读该消息并将其保存到文件中,每条消息大约需要 10ms
  • 第二组必须逐行读取它,计算某些字符串列表的出现次数,然后将其发送到2个不同的sftp服务器,最后将其压缩为gzip,花510毫秒 >每条消息。

您是否真的希望第一个消费者组花费与第二个消费者组一样的时间来完成消息处理? 地狱。您是否希望第一个消费群体与第二个消费群体一样慢? 地狱。如果您有第三个消费群体,您是否希望其他两个消费群体等待其当前的抵销额? 地狱。想象一下,其中一个消费者组挂起并没有前进:您是否也希望第二个过程挂起? 没有

这是消费者群体的原因,不是矛盾,而是功能。

如果您对同一条消息具有不同类型的进程并希望按顺序执行它们,则应更改逻辑(以便它对同一条消息执行不同的作业),并只设置一个消费者组,或通过Phaser或其他类似机制对其进行同步,以使它们彼此等待。