Kafka--Rebalance重平衡

kafka,rebalance · 浏览次数 : 11

小编点评

一、Rebalance总览 Rebalance触发条件: 1. 消费组成员发生变更,如新消费者加入、离开或崩溃; 2. 消费者组订阅的主题数量发生变更; 3. 消费者组订阅主题的分区数发生变更。 二、避免不必要的Rebalance 为了避免不必要的Rebalance,可以针对以下场景进行优化: 1. 针对消费者崩溃问题,优化session.timeout.ms、heartbeat.interval.ms和max.poll.interval.ms等参数,以保证消费者能够在合理的时间内完成消息处理,避免因处理不及时而导致的Rebalance。 三、Rebalance APIKeys Group Coordinator职能四大类: 1. Coordinator:负责管理消费者组的分区分配信息和Offset,存储消费者组成员元数据,分配GroupID和ConsumerID; 2. Group:负责处理JoinGroupRequest和SyncGroupRequest完成分区分配的工作; 3. Offset:通过心跳检查消费者的状态; 4. Heartbeat:负责监控消费者的存活状态。 APIKeys包括: 1. Find_coordinatorApiKeys:查找Coordinators; 2. Join_GroupApikeys:加入分组; 3. Leave_GroupApiKeys:离开分组; 4. Sync_groupApikeys:同步分组; 5. Offset_commitApikeys:提交偏移量; 6. Offset_FetchApikeys:获取偏移量; 7. Offset_for_leader_epochApikeys:获取指定leader的偏移量; 8. Offset_deleteApikeys:删除偏移量; 9. Heartbeat:心跳检测。 四、分区分配策略 1. RangeAssignor:按范围区段分配,先按分区ID排序,再按订阅相同Topic的Consumer进行排序,尽量均衡分配。 2. RoundRobinAssignor:轮询分配,对消费组内订阅的Topic进行排序,按顺序分配分区。 3. StickyAssignor:尽量与上一次分配结果保持一致,可通过partition.assignment.strategy参数配置。 五、总结 本文主要介绍了Rebalance的触发条件、优化参数以及分区分配策略等方面的内容。通过合理地配置和优化相关参数,可以有效地减少不必要的Rebalance,提高Kafka集群的性能和稳定性。

正文

Rebalance总览

Rebalance触发条件

(1)消费组成员发生变更,有新消费者加入或者离开,或者有消费者崩溃
(2)消费者组订阅的主题数量发生变更
(3)消费组订阅主题的分区数发生变更

避免不必要的Rebalance

针对(1)中消费者崩溃问题,有时候是Consumer没有在配置的制定时间内完成消息的处理,Coordinator就认为该Consumer已经“崩溃”,引发新一轮的Rebalance
可调优参数:
session.timeout.ms:该配置定义了消费者与Kafka集群之间的会话超时时间,如果在这个时间内未发送心跳包到集群服务器,服务器就会将其标记未离线并触发Rebalance

heartbeat.interval.ms:配置心跳包发送的频率,如果session配置6s hearbeat配置2s,那么至少能够保证三轮的心跳请求

max.poll.interval.ms:消费者是通过poll()方法来拉取消息,这个配置定义了两次poll之间的间隔,如果消费者处理数据量非常大超过了max.poll.interval.ms仍没有继续拉取,就会触发Rebalance

Group Coordinator职能


四大类:Coordinator/Group/Offset/Heartbeat
ApiKeys.Find_coordinator
ApiKeys.Join_Group
Apikeys.Leave_Group
Apikeys.Sync_group
Apikeys.Offset_commmit
Apikeys.Offset_Fetch
Apikeys.Offset_for_leader_epoch
Apikeys.Offset_delete
Apikeys.Heartbeat
(1)负责管理消费者组的分区分配信息和Offset,存储消费者组成员元数据,分配GroupID和ConsumerID
(2)负责处理JoinGroupRequest和SyncGroupRequest完成分区分配的工作
(3)通过心跳检查消费者的状态

Consumer Group状态机
image

分区分配策略

RangeAssignor(默认)、RoundRobinAssignor、StickyAssignor
RangeAssignor:按照+Topic+的维度进行分配的,对于每个Topic,首先对Partition按照分区ID进行排序,然后对订阅这个Topic的ConsumerGroup的Consumer再进行排序,之后尽量均衡的按照范围区段将分区分配给Consumer

RoundRobinAssignor:将 Consumer Group 内订阅的所有 Topic 的 Partition 及所有 Consumer 进行排序后按照顺序尽量均衡的一个一个进行分配。如果 Consumer Group 内,每个 Consumer 订阅都订阅了相同的Topic,那么分配结果是均衡的。如果订阅 Topic 是不同的,那么分配结果是不保证“尽量均衡”的,因为某些 Consumer 可能不参与一些 Topic 的分配

StickyAssignor:可通过partition.assignment.strategy参数配置,发生Rebalance时尽量与上一次分配的结果保持一致

RangeAssignor图解
image

RoundRobinAssignor图解

组内订阅Topic相同

image

组内订阅Topic不同

image

StickyAssignor图解

重平衡前

image

重平衡后

image

与Kafka--Rebalance重平衡相似的内容:

Kafka--Rebalance重平衡

Rebalance总览 Rebalance触发条件 (1)消费组成员发生变更,有新消费者加入或者离开,或者有消费者崩溃 (2)消费者组订阅的主题数量发生变更 (3)消费组订阅主题的分区数发生变更 避免不必要的Rebalance 针对(1)中消费者崩溃问题,有时候是Consumer没有在配置的制定时间

剖析 Kafka 消息丢失的原因

Kafka消息丢失的原因通常涉及多个方面,包括生产者、消费者和Kafka服务端(Broker)的配置和行为。下面将围绕这三个关键点,详细探讨Kafka消息丢失的常见原因,并提供相应的解决方案和最佳实践。总的来说,Kafka消息丢失是一个涉及多个环节的问题,需要从生产者、Broker和消费者三个层面综...

kafka事务流程

流程 kafka事务使用的5个API // 1. 初始化事务 void initTransactions(); // 2. 开启事务 void beginTransaction() throws ProducerFencedException; // 3. 在事务内提交已经消费的偏移量(主要用于消费

Kafka多维度调优

优化金字塔 应用程序层面 框架层面(Broker层面) JVM层面 操作系统层面 应用程序层面:应当优化业务代码合理使用kafka,合理规划主题,合理规划分区,合理设计数据结构; 框架层面:在不改动源码的情况下,从kafka参数配置入手,结合业务体量和运行数据进行调优 JVM层面:在出现明显缓慢和可

腾讯面试:如何提升Kafka吞吐量?

Kafka 是一个分布式流处理平台和消息系统,用于构建实时数据管道和流应用。它最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。 Kafka 特点是高吞吐量、分布式架构、支持持久化、集群水平扩展和消费组消息消费,具体来说: 高吞吐量:Kafka 具有高性能和低延迟的特性,

Kafka源码分析(四) - Server端-请求处理框架

系列文章目录 https://zhuanlan.zhihu.com/p/367683572 一. 总体结构 先给一张概览图: 服务端请求处理过程涉及到两个模块:kafka.network和kafka.server。 1.1 kafka.network 该包是kafka底层模块,提供了服务端NIO通信

Kafka 线上性能调优

Kafka 线上性能调优是一项综合工程,不仅仅是 Kafka 本身,还应该从硬件(存储、网络、CPU)以及操作系统方面来整体考量,首先我们要有一套生产部署方案,基于这套方案再进行调优,这样就有了可靠的底层保证,才能保证 Kafka 集群整体的稳定性。 1. 线上部署方案 1.1 操作系统 我们知道

从kafka与Flink的事务原理来看二阶段提交与事务日志的结合使用

两阶段提交的成立要基于以下假设: - 该分布式系统中,存在一个节点作为协调者,其他节点作为参与者,且节点之间可以进行网络通信。 - 所有节点都采用预写式日志,且日志被写入后即被保存在可靠的存储设备上,即使节点损坏也不会导致日志数据的丢失。 - 所有节点不会永久性损坏,即使损坏后也可以恢复。 ###

[转帖]Kafka 基本概念大全

https://my.oschina.net/jiagoushi/blog/5600943 下面给出 Kafka 一些重要概念,让大家对 Kafka 有个整体的认识和感知,后面还会详细的解析每一个概念的作用以及更深入的原理 ・Producer:消息生产者,向 Kafka Broker 发消息的客户端

[转帖]Kafka 与RocketMQ 落盘机制比较

https://www.jianshu.com/p/fd50befccfdd 引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性。 何为“可靠性”? 先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区均能很好应对泥泞的路况