卡夫卡在再平衡过程中承诺



场景:

  1. 卡夫卡2.4.1
  2. Kafka分区正在积极处理消息
  3. CPU使用率较低,内存使用率一般,没有观察到节流现象
  4. Golang应用程序使用confluent的go客户端1.7.0版本部署在k8s上
  5. k8s删除了一些pod,卡夫卡消费者群体进入了再平衡
  6. 在重新平衡过程中处理的消息被夹在中间,大约需要17分钟才能处理,通常处理时间最长为3-4秒
  7. 没有DB节流,负载实际上甚至还不到我们峰值的10%
  8. k8s吊舱有1个核心和1gb内存
  9. 消息在同一个线程中消费和处理
  10. 早些时候,我们发现6集群节点中的一个代理不健康,我们更换了它,之后我们开始面临这个问题

问题-为什么消息被卡住?是因为重新平衡导致处理线程挂起吗?还是别的什么?

提前感谢您的回答!

由于消费者群体(CG(的再平衡,消息被卡住。卡夫卡的再平衡过程是一个正常的过程,当新成员加入CG或离开CG时总是会触发。在重新平衡期间,消费者会在一段时间内停止处理消息,因此,对主题中的事件的处理会有一些延迟。但如果CG卡在PreparingRebalance中,则不会处理任何数据。

您可以通过运行一些Kafka命令来识别CG状态,例如:

kafka-consumer-groups.sh --bootstrap-server $BROKERS:$PORT --group $CG --describe --state

它应该显示CG的状态,例如:

GROUP                     COORDINATOR (ID)          ASSIGNMENT-STRATEGY  STATE           #MEMBERS
name-of-consumer-group brokerX.com:9092 (1)                      Empty           0

在上面的例子中,您有STATE:EMPTY

ConsumerGroup状态可能有5种状态:

稳定-当CG稳定并且所有成员都成功连接时

-当组中没有成员时(通常意味着模块停机或崩溃(

PreparingRebalance-是成员连接到CG时(当成员不断崩溃时,这可能表明客户端有问题,但也是CG在稳定状态之前的状态(

CompletingRebalance-是指"准备再平衡"完成再平衡过程时的状态

Dead-使用者组没有任何成员,元数据已被删除。

要根据PreparingRebalance指示问题是在群集上还是在客户端上,只需停止客户端并执行命令以验证CG状态。。。如果CG仍将显示成员。。那么您必须重新启动输出命令中指向的代理,作为CG示例brokerX.com:9092的协调器。。如果在您停止所有连接到CG的客户端后,CG变为空,则意味着客户端代码/数据出现问题,导致成员离开/重新加入CG,因此您会发现CG始终处于PreparingRebalance的状态,您需要调查为什么会发生这种情况。

据我回忆,Kafka 2.4.1版本中有一个错误。并在2.4.1.1中修复,您可以在此处阅读:

  • https://issues.apache.org/jira/browse/KAFKA-9752
  • https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-msk-now-offers-version-2-4-1-1-fixing-a-perpetual-rebalance-bug-in-apache-kafka-2-4-1/

我的故障排除步骤应该向您展示如何验证您是否面临错误问题或只是错误代码。

最新更新