消费异常

问题现象

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

img

排除过程

  1. 根据以上三种现象,可以推断出是 协调器不可用 。推断出问题的原因,现在开始分析为什么会出现这个问题。

    协调器分为:消费组协调器 和 消费者协调器 两种。

    • 消费组协调器:可以理解为各个消费者协调器的一个中央处理器, 每个消费者的所有交互都是和组协调器(GroupCoordinator)进行的。在broker侧负责
    • 消费者协调器:每个客户端都会有一个消费者协调器, 他的主要作用就是向组协调器发起请求做交互, 以及处理回调逻辑。在消费者侧负责

    问题通常处在消费组协调器,如果是消费者协调器的问题,一开始就有问题而不是运行一段时间后才出现问题。现在详细分析消费组的协调器。首先了解下以下两个问题。

    • 消费组的协调器对职责是什么呢?

      • 选举Leader消费者客户端
      • 处理申请加入组的客户端
      • 再平衡后同步新的分配方案
      • 维护与客户端的心跳检测
      • 管理消费者已消费偏移量,并存储至__consumer_offset中
    • 消费者的协调器如何选举的呢?

      • 根据消费组的名称,取hashcode。
      • 查询系统主题 __consumer_offsets 主题的分区个数,默认50个分区
      • 使用消费组 hashcode 与 _consumer_offsets 主题的分区个数取余,得到mod。
      • 选择 __consumer_offsets 中分区编号为 mod 分区 Leader 所在节点的broker成为该消费组的组协调器。

    了解完消费者的协调器如何选举后,主题 __consumer_offsets 其中一个分区就是该消费组的组协调器。抛出异常信息是协调器不可用,则说明这个分区不在线。根据这个思路排除分区在不在线。

  2. 查看 __consumer_offsets 主题所有分区是否在线

    ./kafka-topics.sh --command-config ../config/sasl.properties --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --topic __consumer_offsets --describe  
    

    img

    由此可见,是有一些分区不可用。

处理方法

由于副本数为1个,因此要把挂掉的 broker 启动起来。上面截图中 Replicas 字段就是对应的 broker 节点。

优化建议

主题 __consumer_offsets 副本数要大于1个,否则挂一个节点有几率整个消费者都有问题。配置 __consumer_offsets 主题副本数参数 (offsets.topic.replication.factor)

扩容分区副本,请 该参考

posted @ 2023-04-16 16:40  jiaxzeng  阅读(39)  评论(0)    收藏  举报