Kafka重平衡机制

Kafka架构

消费者

重平衡

重平衡是指在消费者加入或离开消费者群组时,由消费者协调器(Coordinator)发起的重新分配分区的过程。在重平衡过程中,消费者会停止读取消息,释放已经持有的分区并重新分配新的分区,从而实现消费者负载均衡,避免某些消费者处理过多的消息,而其他消费者处于空闲状态。

重平衡只是影响消费者的分区,即在消费者发生变动的情况下进行更改的(挂了什么的)

重平衡策略

Kafka是一款开源的分布式消息队列,支持多个消费者同时订阅同一个topic。为了保证消费者集群内各个节点的负载均衡,Kafka提供了四种重平衡策略。

范围分配(平均划定范围)

轮询分区(默认的策略)

模板匹配

粘性分区(在进行新的分配之前考虑上一次分配的结果,减少重分配)

重平衡如何进行

进行的时机

当 Kafka 集群中添加或删除主题分区时,或者消费者加入或离开消费组时,就会发生重平衡。重平衡会导致消费者重新分配分区,这意味着该消费者可能需要重新加载从其他消费者分配来的分区数据。

从消费者端看重平衡

(谁先加入谁是主要消费者负责人)-主要负责消费组中消费者分区的分配(消费者协调器)

步骤(发送两次消息joingroup和SyncGroup请求)

1,先确定人数

2,再确定策略并且将策略进行广播

从协调者(组协调器)的角度看(消费者进组)

分为很多种情况,但都是基于心跳检测进行的

消费者组的5种状态

​ 5种状态分别为

新的消费者从empty开始

其中的重要参数

session.timeout.ms(检测消费者失败的时间),更小则更快发现重平衡避免消费滞后,但是也会导致频繁重平衡

max.poll.interval.ms(消费者处理消息逻辑的最大时间,对于某些业务来说,处理消息可能需要很长时间,比如需要 1分钟,那么该参数就需要设置成大于 1分钟的值,否则就会被 Coordinator(协调者) 剔除消息组然后重平衡。)

heartbeat.interval.ms(该参数跟 session.timeout.ms 紧密关联,只要在 session.timeout.ms 时间内与Coordinator 保持心跳,就不会被 Coordinator 剔除,那么心跳间隔的时间就是session.timeout.ms,因此,该参数值必须小于 session.timeout.ms ,以保持session.timeout.ms 时间内有心跳。)

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP