当前位置: 首页 > 知识库问答 >
问题:

Kafka消费群体的根本原因是再平衡

邢飞雨
2023-03-14

kafka机器作为hortonworks包的一部分安装,kafka版本为0.1X

我们运行deeg_data应用程序,使用kafka主题中的数据

在最后几天,我们看到我们的应用程序--deeg_data失败了,我们开始寻找根本原因

kafka集群中,我们看到以下行为

/usr/hdp/current/kafka-broker/bin/kafka-consumer-groups.sh --group deeg_data --describe --bootstrap-server kafka1:6667
To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files>
where num_of_file > 0
GC log rotation is turned off
Consumer group ‘deeg_data’ is rebalancing

kafkakafka集群是健康的,所有的主题都是平衡的,所有的kafka经纪人都正确地向zooManager签名

一段时间后(几个小时),我们再次运行以下内容,但没有错误-消费者组'deeg_data'正在重新平衡

我们得到以下正确的结果

/usr/hdp/current/kafka-broker/bin/kafka-consumer-groups.sh --group deeg_data --describe --bootstrap-server kafka1:6667
To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files>
where num_of_file > 0
GC log rotation is turned off
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG OWNER
deeg_data pot.sdr.proccess 0 6397256247 6403318505 6062258 consumer-1_/10.3.6.237
deeg_data pot.sdr.proccess 1 6397329465 6403390955 6061490 consumer-1_/10.3.6.237
deeg_data pot.sdr.proccess 2 6397314633 6403375153 6060520 consumer-1_/10.3.6.237
deeg_data pot.sdr.proccess 3 6397258695 6403320788 6062093 consumer-1_/10.3.6.237
deeg_data pot.sdr.proccess 4 6397316230 6403378448 6062218 consumer-1_/10.3.6.237
deeg_data pot.sdr.proccess 5 6397325820 6403388053 6062233 consumer-1_/10.3.6.237.
.
.
.

所以我们想了解为什么我们会:

Consumer group ‘deeg_data’ is rebalancing

出现上述状况的原因是什么,以及我们为什么会得到重新平衡

我们也有好职位(https://www.confluent.io/blog/kafka-consumer-multi-threaded-messaging/)

当需要在消费者组中的消费者之间重新分配分区时,会触发组再平衡消费者组再平衡:新消费者加入组;现有消费者离开集团;现有消费者更改订阅;或将分区添加到订阅的主题之一。

再平衡由集团协调员协调,涉及与集团内所有消费者的沟通。要深入了解消费者群体再平衡协议,请查看Kafka再平衡协议中你一直想知道但不敢问的马蒂亚斯·J·萨克斯(Matthias J.Sax)和格温·沙皮拉(Gwen Shapira)的阿帕奇·Kafka神奇再平衡协议。

关于客户机代码,在重新平衡期间,分配给它的一些分区可能会被撤销。在旧版本的再平衡协议(称为“急切再平衡”)中,分配给使用者的所有分区都会被撤销,即使它们将再次分配给同一使用者。对于较新的协议版本,增量合作再平衡,只有重新分配给另一个使用者的分区才会被撤销。你可以在Konstantine Karantasis的这篇博文和Sophie Blee Goldman的这篇博文中了解更多关于新的再平衡协议的信息。

无论协议版本如何,当一个分区即将被撤销时,消费者必须确保记录处理已经完成,并且在通知组协调器可以安全地重新分配该分区之前,该分区的偏移量已经提交。

在每用户线程模型中启用了自动偏移提交,您就不必担心组重新平衡。一切都是通过轮询方法自动完成的。但是,如果禁用自动偏移提交和手动提交,则在发送加入组请求之前提交偏移是您的责任。您可以通过两种方式实现这一点:

注意-也很好的帖子是从你-管-https://www.youtube.com/watch?v=QaeXDh12EhE

注意-好的堆栈溢出后-Kafka消费者再平衡需要太长时间

注意-从ENV方面来看,由于我们的zooManager服务器安装在VM机器上,而VM机器使用非ssd磁盘,并且关于交换消耗,那么我认为我们还需要考虑后https://community.cloudera.com/t5/Community-Articles/Zookeeper-Sizing-and-Placement/ta-p/247885

共有1个答案

冯峻
2023-03-14

Kafka中的再平衡是一种协议,由各种组件(Kafka连接、Kafka流、模式注册表等)用于各种目的。

最简单的形式是,只要元数据发生任何更改,就会触发重新平衡。

现在,元数据这个词可以有很多含义-例如:

  • 在主题的情况下,元数据可能是主题分区和/或副本,以及它们存储的位置(哪个代理)
  • 在消费者组的情况下,它可能是作为组一部分的消费者的数量,以及他们正在消费来自等等的消息的分区。

上面的例子并不详尽,也就是说,主题和消费者群体有更多的元数据,但我不会在这里详述。

因此,如果有任何变化:

  • 一个主题的分区或副本的数量,如添加,删除或不可用
  • 一个消费群体中的消费者数量,如添加或删除
  • 其他类似的变化...

重新平衡将被触发。在消费者群体再平衡的情况下,消费者应用程序需要足够强大,以满足此类场景。

因此,再平衡是一个特征。但是,在您的情况下,这种情况似乎非常频繁,因此您可能需要调查客户端应用程序和集群上的日志。

以下是一些可能有所帮助的参考资料:

  1. 重新平衡协议-关于这个主题的一篇非常好的媒体文章
  2. 消费者再平衡-另一个关于SO关注消费者再平衡的帖子
 类似资料:
  • 当一个组中只有一个消费者,并且认为消费者无法在session.time.out内进行轮询时,将触发重新平衡,但是在这种情况下,组中只有一个消费者,现在假设session.time.out是30秒和消费者民意调查后50秒组协调员将识别消费者后50秒,并允许它提交偏移或协调员将断开消费者和没有偏移得到提交,并将重新平衡消费者与新的消费者标识?如果上次提交的偏移量是345678,在下一次轮询中,它处理了

  • 我是Kafka的新手,正在学习Kafka内部知识。请根据需要随时更正我的理解。。 这是我的实时场景..感谢所有的回复: 我有一个接收数据文件的实时FTP服务器…比如索赔文件。 我将把这些数据发布到一个主题中.让我们把这个主题称为claims_topic(2个分区). 我需要订阅这个claims_topic,阅读消息并将它们写入Oracle和Postgres表。让我们将oracle表称为Otable

  • 试图理解Kafka中的消费者群体行为。示例4分区可用。在消费者方面,消费者群体控制着4个消费者。在这种情况下,在消费者组中的4个消费者中,只有一个消费者始终收到消息。其他人总是无所事事。可能的原因是什么? 是否所有分区都保存相同的消息?或者所有分区都有相同的消息?或者我们可以认为分区不是均匀分布的吗?

  • 如果将与有状态重试一起使用,以便每次重试都从代理轮询消息,则存在消费者组重新平衡的长重试周期可能导致分区被重新分配给另一个消费者的风险。因此,有状态重试周期/尝试将被重置,因为新消费者不知道重试的状态。 举个例子,如果重试最长期限是24小时,但消费者组重新平衡平均每12小时发生一次,则重试永远无法完成,一旦超过保留期限,消息(及其背后的消息)最终将从主题中过期。(假设在此时间内未解决可重试异常的原

  • 我在使用Kafka时遇到了一些问题。非常感谢任何帮助!我在docker swell中分别有zookeeper和kafka集群3个节点。您可以在下面看到Kafka代理配置。 我的情况: < li > 20x位制片人不断向Kafka主题传达信息 < li>1x消费者读取和记录消息 < li >终止kafka节点(docker容器停止),因此现在群集有2个Kafka代理节点(第3个节点将自动启动并加入群

  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。