赞
踩
消费者组的重平衡就组内的消费者,对消费那些主题分区达成一致的过程,Kafka会尽量保证分配的均匀。
consumer group 的rebalance 本质上是一组协议,它规定了一个conusmer group 是如何达成一致来订阅分配
topic的所有分区的。只有consumer group有rebalance ,standalone consumer是没有rebalance的,standalone
consumer 只是通过coordinator获取到消费的位移。
2和3一般都会是运维的操作,我们只需要关注第一种rebalance的场景就可以了。真实场景下,rebalance 的触发场景经常就是第一种,consumer正常情况下也是会触发rebalance 这种场景就是,处理消息的逻辑时间太久,超过了我们设置的最大的处理消息时间,这个时候根据自己的业务评估,设置合理的处理消息最大事件,避免不必要的rebalance。
Rebalance 分区分配
consume 默认提供三种分区策略 range策略、 策略和sticky策略。如右图所示rang 策略不会去管之前的分区策略,只会重新分成几个区域后进行分配,round-robin也是直接轮询到消费者组的consuner上。sticky则不同假设第三台机器挂掉前两台机器的分配策略不变,仅仅把挂掉的那台机器消费的分区负载到存活的consumer上即可。kafka也支持自定义的重平衡分配策略,用户需要创建自己的分配器。
sticky
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XfshiSek-1612148929888)(/Users/zy1994/Library/Application Support/typora-user-images/image-20210201110552316.png)]
Rebalance流程
如右图所示,为一次重平衡的流程。
首先消费者组的成员需要找到coordinator 算法之前已经讲过了。
然后成员进行加入组的请求。coordinator会给所有的成员中选取出一个leader。负责分配rebalance方案。
然后将订阅信息,consumer group的信息返回给consumer。
接下来consumer group的所有成员还会请求coordinator,此时的请求方式为syncgroup。leader会把consumer group信息和分配方案发送给Coordinator,其他的请求也会发送请求,不过不包含信息,之后,Coordinator会把分配信息发送给各个成员,一次Rebalance完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPdcpVB1-1612148929890)(/Users/zy1994/Library/Application Support/typora-user-images/image-20210201110750124.png)]
Reblance 日志:**
[2021-01-22 15:37:40,672] INFO [GroupCoordinator 0]: Member consumer-1-277bdb46-2940-4a80-bb4a-9f97379c2e7c in group hello_1 has failed, removing it from the group (kafka.coordinator.group.GroupCoordinator)
[2021-01-22 15:37:40,674] INFO [GroupCoordinator 0]: Preparing to rebalance group hello_1 in state PreparingRebalance with old generation 3 (__consumer_offsets-24) (reason: removing member consumer-1-277bdb46-2940-4a80-bb4a-9f97379c2e7c on heartbeat expiration) (kafka.coordinator.group.GroupCoordinator)
[2021-01-22 15:37:42,674] INFO [GroupCoordinator 0]: Stabilized group hello_1 generation 4 (__consumer_offsets-24) (kafka.coordinator.group.GroupCoordinator)
[2021-01-22 15:37:42,676] INFO [GroupCoordinator 0]: Assignment received from leader for group hello_1 for generation 4 (kafka.coordinator.group.GroupCoordinator)
记一次解决Kafka问题:
每隔一段时间Kafka就会进行定期的选举,产生大量的日志切分的日志。导致运维告警。
分析问题:
1.重新选举时大量的日志切分日志
部署选择的是默认的配置,所以kafka写入到Leader replica就认为写入成功,会导致leader 和 follower 数据不同步。当重新选主后就会出现大量的日志切分日志。
2.开启了定期选主的参数,应该设置为false。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Juro3ozx-1612148929892)(/Users/zy1994/Library/Application Support/typora-user-images/image-20210122160354677.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tubAdieg-1612148929893)(/Users/zy1994/Library/Application Support/typora-user-images/image-20210122160343310.png)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。