【问题标题】:Kafka Resiliency - Group Coordinator卡夫卡弹性 - 组协调员
【发布时间】:2018-11-08 14:52:29
【问题描述】:

据我了解,其中一位经纪人被选为负责消费者再平衡的小组协调员。

Discovered coordinator host:9092 (id: 2147483646 rack: null) for group good_group

我有 3 个节点,复制因子为 3 和 3 个分区。 一切都很好,当我在非协调节点上杀死 kafka 时,消费者仍在接收消息。

但是当我使用协调器终止该特定节点时,不会发生重新平衡,并且我的 java 消费者应用程序没有收到任何消息。

2018-05-29 16:34:22.668 INFO  AbstractCoordinator:555 - Discovered coordinator host:9092 (id: 2147483646 rack: null) for group good_group.
2018-05-29 16:34:22.689 INFO  AbstractCoordinator:600 - Marking the coordinator host:9092 (id: 2147483646 rack: null) dead for group good_group
2018-05-29 16:34:22.801 INFO  AbstractCoordinator:555 - Discovered coordinator host:9092 (id: 2147483646 rack: null) for group good_group.
2018-05-29 16:34:22.832 INFO  AbstractCoordinator:600 - Marking the coordinator host:9092 (id: 2147483646 rack: null) dead for group good_group
2018-05-29 16:34:22.933 INFO  AbstractCoordinator:555 - Discovered coordinator host:9092 (id: 2147483646 rack: null) for group good_group.
2018-05-29 16:34:23.044 WARN  ConsumerCoordinator:535 - Auto offset commit failed for group good_group: Offset commit failed with a retriable exception. You should retry committing offsets. 

我做错了什么吗?有办法解决这个问题吗?

【问题讨论】:

  • 如果你查看日志,几乎感觉它与小组协调员的连接不好。它发现它,然后在重复时将其标记为死亡。
  • stackoverflow.com/questions/35636739/… 也许你可以从中得到一些有用的信息。

标签: java spring apache-kafka


【解决方案1】:

但是当我使用协调器终止该特定节点时,不会发生重新平衡,并且我的 java 消费者应用程序没有收到任何消息。

组协调器接收来自消费者组中所有消费者的心跳。它维护一个活跃消费者的列表,并在此列表的更改上启动重新平衡。然后组长执行再平衡活动。

这就是如果你杀死组协调员,重新平衡将停止的原因。

更新

如果 group coordinator broker 关闭,Zookeeper 会收到通知,并且选举开始自动从活跃的 broker 中提升一个新的 group coordinator。所以与组协调员无关。让我们看看日志:

2018-05-29 16:34:23.044 WARN  ConsumerCoordinator:535 - Auto offset commit failed for group good_group: Offset commit failed with a retriable exception. You should retry committing offsets.

内部主题__consumer_offset的复制因子可能默认值为1。您能检查一下default.replication.factoroffsets.topic的值是多少。 replication.factor 在 server.properties 文件中。如果默认值为 1,则应将其更改为更大的值。如果不这样做,组协调器将关闭,导致偏移管理器在没有备份的情况下停止。所以提交offset的活动是做不了的。

【讨论】:

  • 谢谢。那么解决方法是什么?如果是这样的话,它似乎根本没有弹性。如果第 50 个节点有协调器并且它死了,那么拥有 100 个节点的集群有什么意义。就弹性而言,其他 50 个节点毫无用处。我将不得不再次重新启动我的 java 应用程序。
  • 我刚刚更新了我上面的答案。请检查 default.replication.factor 和 offsets.topic.replication.factor 的值,如果它们是 1 然后更改为 3,例如。
  • 那个主题是3个复制因子
  • 我可以知道你的 server.properties 文件中 default.replication.factor 和 offsets.topic.replication.factor 的值是什么吗?这不是关于你自己的主题,而是 Kafka 生成的名为 __consumer_offset 的内部主题,用于管理提交偏移量。
  • 您可能需要增加__consumer_offset 日志上的分区;看起来它们不是自动增加的 - 我把所有日志都吹走了,从一个干净的代理开始,新日志有 3 个副本,我的消费者现在恢复正常。
猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2020-06-22
相关资源
最近更新 更多