kafka
https://towardsdev.com/kafka-101-a-beginners-guide-to-understanding-kafka-2cd797864614
https://highscalability.com/untitled-2/
Kafka 重平衡策略:深入解读
什么是 Kafka 重平衡?
Kafka 集群中的分区(Partition)会不断地重新分配给不同的 Broker,以保证数据的高可用性和负载均衡。这个过程就叫做重平衡。
为什么需要重平衡?
- 负载均衡: 保证每个 Broker 上的分区数量大致相等,避免单个 Broker 过载。
- 故障恢复: 当 Broker 发生故障时,其上的分区会重新分配到其他 Broker 上。
- 拓扑变更: 当集群中的 Broker 增加或减少时,需要重新分配分区以适应新的集群拓扑。
Kafka 的重平衡策略
Kafka 的重平衡策略主要由 消费者组 (Consumer Group) 来控制。每个消费者组都有一个唯一的组 ID,组内的消费者共同消费一个或多个主题。
- 消费者组的协调者: 每个消费者组都会选举出一个协调者(Coordinator),负责管理该组的重平衡过程。
- 重平衡触发条件:
- 消费者加入或退出组: 当有新的消费者加入或已有消费者离开组时,会触发重平衡。
- 分区数量发生变化: 当主题的分区数量发生变化时,也会触发重平衡。
- 消费者配置发生变化: 消费者配置的改变,例如订阅主题的变化,也会触发重平衡。
- 重平衡过程:
- 协调者发起重平衡: 协调者向组内所有消费者发送重平衡请求。
- 消费者准备重平衡: 消费者收到请求后,会停止消费消息,并进入重平衡准备状态。
- 分配分区: 协调者根据一定的分配策略,将所有分区重新分配给组内的消费者。
- 消费者提交偏移量: 消费者提交最新的偏移量,以便在重平衡完成后从正确的位置开始消费。
- 消费者开始新一轮消费: 消费者从新分配的分区中获取最新的偏移量,并开始消费。
Kafka 的重平衡策略分类
- Range 分配策略: 将分区按照范围均匀地分配给消费者。
- Round-robin 分配策略: 轮询的方式将分区分配给消费者。
- 自定义分配策略: 用户可以自定义分配策略,以满足特定的业务需求。
重平衡对应用的影响
- 性能影响: 重平衡期间,消费者会停止消费消息,这会导致应用的延迟增加。
- 数据一致性: 重平衡可能会导致数据重复消费或丢失,需要采取相应的措施来保证数据一致性。
如何优化重平衡
- 减少重平衡次数: 避免频繁地修改消费者组配置或分区数量。
- 增加消费者数量: 增加消费者数量可以减少每个消费者需要处理的分区数量,从而提高消费性能。
- 优化自定义分配策略: 根据业务需求,设计合理的自定义分配策略,以提高重平衡效率。
- 使用事务: 利用 Kafka 的事务特性,保证在重平衡期间数据的准确性。
总结
Kafka 的重平衡机制是保证集群高可用性和负载均衡的关键。通过了解重平衡的原理和影响因素,我们可以更好地优化 Kafka 集群的性能,并保证应用的稳定性。
如何避免重平衡
https://dzone.com/articles/kafka-streams-tips-on-how-to-decrease-rebalancing
https://dzone.com/articles/kafka-streams-tips-on-how-to-decrease-rebalancing