Kafka的高级消费者失败

cuxqih21  于 2021-06-09  发布在  Kafka
关注(0)|答案(1)|浏览(382)

我有以下Kafka设置

Number of producer : 1
    Number of topics : 1
    Number of partitions : 2
    Number of consumers : 3 (with same group id)
    Number of Kafka cluster : none(single Kafka server)
    Zookeeper.session.timeout : 1000
    Consumer Type : High Level Consumer

生产者生成没有任何特定分区逻辑(默认分区逻辑)的消息。消费者1持续消费信息。我突然杀死了消费者1,我希望消费者2或消费者3在消费者1失败后使用消息。
在某些情况下,会发生重新平衡,消费者2开始消费消息。这很好。但在某些情况下,消费者2或消费者3根本不消费。我必须手动杀死所有消费者,然后再次启动所有三个消费者。只有在重新启动之后,消费者1才会再次开始消费。
准确地说,在某些情况下,重新平衡是成功的,而在某些情况下,重新平衡是不成功的。是否有任何配置我丢失。

qq24tv8q

qq24tv8q1#

Kafka使用zookeeper来协调高级消费者。
从http://kafka.apache.org/documentation.html :
分区所有者注册表
每个代理分区由给定使用者组中的单个使用者使用。使用者必须先建立其对给定分区的所有权,然后才能开始任何消费。为了建立它的所有权,使用者在它声明的特定代理分区下的临时节点中写入它自己的id。
/使用者/[group\u id]/owners/[topic]/[broker\u id-partition\u id]->使用者节点\u id(临时节点)
有一个已知的短暂节点怪癖,在zk客户机突然宕机后,它们最多可以逗留30秒:http://developers.blog.box.com/2012/04/10/a-gotcha-when-using-zookeeper-ephemeral-nodes/
因此,如果您希望使用者2和3在#1终止后立即开始阅读消息,则可能会遇到这种情况。
您还可以检查/consumers/[group\u id]/owners/[topic]/[broker\u id-partition\u id]在重新平衡后是否包含正确的数据。

相关问题