Spark Streaming消费Kafka出现消费组rebalancing

Posted 追求无悔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark Streaming消费Kafka出现消费组rebalancing相关的知识,希望对你有一定的参考价值。

1. 问题描述

  1. 我们使用spark streaming进行kafka消费,首次启动时会出现尝试加入消费组,尝试时间长达几分钟,后续会有一定概率能加入消费组,但偶现另一个异常提示另一个消费者抢占了消费组;
  2. 我们使用的其他kafka消费者能正常加入消费组并进行消费;
    详细日志如下:
    Attempt to heartbeat failed since group is rebalancing:

    Previously tracked partitions [topic-0,topic-1,topic-2] been revoked by Kafka because of consumer rebalance. This is mostly due to another stream with same group id joined, please check if there\'re different streaming application misconfigure to use same group id. Fundamentally different stream should use different group id:

2. 问题分析
从第一个日志信息来看,猜测是因为kafka消费者的参数问题,尝试修改kafka的参数,参考部分网上建议,修改参数max.poll.interval.ms,因为我们的消费间隔是10分钟,所以将此参数增大至15分钟,保证在下一个消费周期内不会被踢出group,结果是问题没有解决;
根据第二个报错信息来看,是有其他消费者占用了这个消费组,我通过命令行:kafka-consumer-groups.sh --bootstrap-server 192.168.100.114:9093 --describe --group spark_streaming_group --command-config /opt/consumer.properties,查看我spark streaming的group被哪些消费者占用了,执行以后发现没有消费者占用此group,这就很疑惑了!!!

3. 问题解答
先说原因:不同的consumer使用同一个group.id消费不同的topic,当任何一个topic的consumer出现加入或退出group时,所有group.id组里的consumer都会发生rebanlance;
我这边在kafka配置文件中指定了一个默认的group.id,然后多个消费者都是用了相同的默认group.id来消费不同的topic里面的数据,所以出现了这种情况,当我改成不同的group.id来消费时,问题就解决了。这时候再查询就ok了:

4. 总结
原理:
消费者在zookeeper中注册中,消费者注册标识符(Consumer Identifiers Registry)是保存在zookeeper的/consumers/[group_id]/ids/[consumer_connector_id]的路径下,这些消费者注册节点形成一棵树,当有消费者加入或离开时,树上所有的消费者都会被通知到,从而进行rebanlance。
消费者在zookeeper注册的路径与topic并没有关系,反而与groupid绑定,这是因为同一个consumer可以消费不同的topic。

定位问题时没有想过这个问题,总感觉不同topic都会各自维护,没想到会影响这么大,涨知识了!!!引以警戒!

以上是关于Spark Streaming消费Kafka出现消费组rebalancing的主要内容,如果未能解决你的问题,请参考以下文章

大数据Spark“蘑菇云”行动之spark streaming消费flume采集的kafka数据Directf方式

spark streaming从指定offset处消费Kafka数据

如何管理Spark Streaming消费Kafka的偏移量

[Spark]Spark-streaming通过Receiver方式实时消费Kafka流程(Yarn-cluster)

用canal同步binlog到kafka,spark streaming消费kafka topic乱码问题

kafka unclean 配置代表啥,会对 spark streaming 消费有什么影响?