消费异常
问题现象
- 原有的消费者消费不到数据
- 新加入消费者也是不消费数据
- 查看消费组的详情,抛出
The coordinator is not available.异常信息

排除过程
-
根据以上三种现象,可以推断出是 协调器不可用 。推断出问题的原因,现在开始分析为什么会出现这个问题。
协调器分为:消费组协调器 和 消费者协调器 两种。
- 消费组协调器:可以理解为各个消费者协调器的一个中央处理器, 每个消费者的所有交互都是和组协调器(GroupCoordinator)进行的。在broker侧负责
- 消费者协调器:每个客户端都会有一个消费者协调器, 他的主要作用就是向组协调器发起请求做交互, 以及处理回调逻辑。在消费者侧负责
问题通常处在消费组协调器,如果是消费者协调器的问题,一开始就有问题而不是运行一段时间后才出现问题。现在详细分析消费组的协调器。首先了解下以下两个问题。
-
消费组的协调器对职责是什么呢?
- 选举Leader消费者客户端
- 处理申请加入组的客户端
- 再平衡后同步新的分配方案
- 维护与客户端的心跳检测
- 管理消费者已消费偏移量,并存储至__consumer_offset中
-
消费者的协调器如何选举的呢?
- 根据消费组的名称,取hashcode。
- 查询系统主题 __consumer_offsets 主题的分区个数,默认50个分区
- 使用消费组 hashcode 与 _consumer_offsets 主题的分区个数取余,得到mod。
- 选择 __consumer_offsets 中分区编号为 mod 分区 Leader 所在节点的broker成为该消费组的组协调器。
了解完消费者的协调器如何选举后,主题 __consumer_offsets 其中一个分区就是该消费组的组协调器。抛出异常信息是协调器不可用,则说明这个分区不在线。根据这个思路排除分区在不在线。
-
查看 __consumer_offsets 主题所有分区是否在线
./kafka-topics.sh --command-config ../config/sasl.properties --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --topic __consumer_offsets --describe
由此可见,是有一些分区不可用。
处理方法
由于副本数为1个,因此要把挂掉的 broker 启动起来。上面截图中 Replicas 字段就是对应的 broker 节点。
优化建议
主题 __consumer_offsets 副本数要大于1个,否则挂一个节点有几率整个消费者都有问题。配置 __consumer_offsets 主题副本数参数 (offsets.topic.replication.factor)
扩容分区副本,请 该参考

浙公网安备 33010602011771号