我在dockerized Kubernetes基础设施上运行一个kafka集群,其中包含一组消费者。典型的工作流程是,当某个消费者(消费者组中的)死亡时,将触发一个再平衡过程,并将分区重新分配给该消费者集(不包括失败的消费者)。
一段时间后,Kubernetes控制器将重新创建/重启失败/死亡的消费者实例,并再次执行新的rebalance。
是否有任何方法来控制第一次再平衡过程(当消费者死亡时),例如,等待几秒钟而不进行再平衡,直到失败的消费者返回,或者直到触发超时。如果消费者返回,是否继续基于旧的再平衡分配进行消费(即,不进行新的再平衡)?
在此基础上有3个参数组协调器决定消费者是死是活
session.timeout.ms
max.poll.interval.ms
heartbeat.interval.ms
您可以通过调整以上三个参数和一个经验法则来避免不必要的再平衡:在池循环中使用单独的线程调用第三方api。
调优以上三个参数需要回答以下问题
- size max.poll.records
- 应用程序处理一条记录所需的平均时间
- 应用程序处理完整批处理所需的平均时间
请参考Kafka消费者配置
https://docs.confluent.io/platform/current/installation/configuration/consumer-configs.html
你也可以探索合作再平衡
https://www.confluent.io/blog/incremental-cooperative-rebalancing-in-kafka/