kafka reblance入门
概念
Rebalance 本质上是一种协议,规定了一个 Consumer Group
下的所有 consumer
如何达成一致,来分配订阅 Topic 的每个分区。
例如:某 Group 下有 20 个 consumer 实例,它订阅了一个具有 100 个 partition 的 Topic 。正常情况下,kafka 会为每个 Consumer 平均的分配 5 个分区。这个分配的过程就是 Rebalance
。
触发 Rebalance 的时机
Rebalance 的触发条件有3个。
- 组成员个数发生变化。例如有新的 consumer 实例加入该消费组或者离开组。
- 订阅的 Topic 个数发生变化。
- 订阅 Topic 的分区数发生变化。
Rebalance 的好处
Rebalance
发生时,Group 下所有 consumer 实例都会协调在一起共同参与,kafka
能够保证尽量达到最公平的分配
。
Rebalance 的坏处
Rebalance 过程对 consumer group 会造成比较严重的影响。在 Rebalance 的过程中 consumer group 下的所有消费者实例都会
停止工作
,等待Rebalance
过程完成。数据重复消费: 消费过的数据由于提交offset任务也会失败,在partition被分配给其他消费者的时候,会造成重复消费,数据重复且增加集群压力
Rebalance扩散到整个ConsumerGroup的所有消费者,因为一个消费者的退出,导致整个Group进行了Rebalance,并在一个比较慢的时间内达到稳定状态,影响面较大
频繁的Rebalance反而降低了消息的消费速度,大部分时间都在重复消费和Rebalance
数据不能及时消费,会累积lag,在Kafka的TTL之后会丢弃数据
Rebalance 的过程
如何避免不必要的rebalance
要避免 Rebalance,还是要从 Rebalance 发生的时机入手。我们在前面说过,Rebalance 发生的时机有三个:
组成员数量发生变化
订阅主题数量发生变化
订阅主题的分区数发生变化
后两个我们大可以人为的避免,发生rebalance最常见的原因是消费组成员的变化。
消费者成员正常的添加和停掉导致rebalance
,这种情况无法避免,但是时在某些情况下,Consumer
实例会被 Coordinator 错误地
认为 “已停止” 从而被“踢出”Group。从而导致rebalance
。
四个参数
session.timeout.ms
表示 consumer 向 broker 发送心跳的超时时间。例如 session.timeout.ms = 180000 表示在最长 180 秒内 broker 没收到 consumer 的心跳,那么 broker 就认为该 consumer 死亡了,会启动 rebalance。
heartbeat.interval.ms
表示 consumer 每次向 broker 发送心跳的时间间隔。heartbeat.interval.ms = 60000 表示 consumer 每 60 秒向 broker 发送一次心跳。一般来说,session.timeout.ms 的值是 heartbeat.interval.ms 值的 3 倍以上。
max.poll.interval.ms
表示 consumer 每两次 poll 消息的时间间隔。简单地说,其实就是 consumer 每次消费消息的时长。如果消息处理的逻辑很重,那么市场就要相应延长。否则如果时间到了 consumer 还么消费完,broker 会默认认为 consumer 死了,发起 rebalance。
max.poll.records
表示每次消费的时候,获取多少条消息。获取的消息条数越多,需要处理的时间越长。所以每次拉取的消息数不能太多,需要保证在 max.poll.interval.ms 设置的时间内能消费完,否则会发生 rebalance。
简单来说,会导致崩溃的几个点是:
消费者心跳超时,导致 rebalance。
消费者处理时间过长,导致 rebalance。
参考
Kafka Rebalance机制分析 - gaoyanliang - 博客园
困扰许久的Kafka Rebalance问题 - 知乎
线上Kafka突发rebalance异常,如何快速解决? - 知乎
kafka reblance入门相关推荐
- 消息中间件 --- Kafka快速入门
消息中间件 --- Kafka 快速入门 消息中间件:https://blog.51cto.com/u_9291927/category33 GitHub: GitHub - scorpiostudi ...
- 大数据技术之 Kafka (第 2 章 Kafka快速入门)
第 2 章 Kafka 快速入门 下载安装kafka集群 1.需要jdk 2.需要zookeeper,这个东西在最新版的Kafka中内置. 3.下载Kafka安装包 (下载官网地址:Apache Ka ...
- 副本与ISR设计--Kafka从入门到精通(十四)
上篇文章说了,broker的消息设计,采用紧凑的byteBuffer,存储设计主要包含attribute后三个表示压缩类型,还有crc效验,以及key和value,后面新增了时间戳. Broker消息 ...
- 大数据技术之Kafka(一)Kafka概述、Kafka快速入门、Kafka架构深入
文章目录 1 Kafka 概述 1.1 定义 1.2 消息队列 1.2.1 传统消息队列的应用场景 1.2.2 消息队列的两种模式 1.3 Kafka 基础架构 2 Kafka 快速入门 2.1 安装 ...
- Apache Kafka开发入门指南
Apache Kafka开发入门指南 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Apache Kafka可以帮助你解决在发布/订阅架构中遇到消费数 ...
- Kafka 快速入门(安装)
kafka学习目录:kafka目录 二.Kafka 快速入门 2.1.windows版安装 2.1.1.Quick Start 本次安装学习在Windows操作系统进行.(Linux版本的差别不大,运 ...
- kafka基础入门_CodingPark编程公园
文章介绍 本文是kafka基础入门篇,讲解内容包括: 1. 消息队列对比表 2. Kafka概念及特性 3. kafka总体结构 4. kafka各项配置 5. 生产者 6. kafka Broker ...
- Apache Kafka教程--Kafka新手入门
Apache Kafka教程–Kafka新手入门 Kafka Assistant 是一款 Kafka GUI 管理工具--管理Broker,Topic,Group.查看消费详情.监控服务器状态.支持多 ...
- Kafka【入门】就这一篇!
一.Kafka 简介 Kafka 创建背景 Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeli ...
最新文章
- LeetCode简单题之判断路径是否相交
- Kamailio v4.4.6 发布,开源 SIP 服务器
- SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善
- 4G EPS 中建立 eNB 与 MME 之间的 S1 连接
- windows命令行帮助文档如何使用
- python中创建对象的七种方式
- 大有可为的GNN:DeepWalk
- boost::python::indirect_traits相关的测试程序
- Vue之代码自动格式化
- Atitit jOrgChart的使用 组织架构图css html
- Redis学习笔记整理(黑马程序员视频课程)
- c#元胞自动机_元胞自动机+生命游戏
- RHadoop安装和使用
- 地脚螺钉直径系列_地脚螺栓规格
- shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
- 课程设计------学生考勤管理系统
- EarthSDK 项目开发使用说明
- 《社交app攻击风险应对策略》
- java 数字补零_java数字位数不足在前后补0
- 【Java并发编程实战】(十七):Future和CompletableFuture的原理及实战——异步编程没有那么难
热门文章
- 输入上标的html标签是,HTML上标sup与下标注sub标签元素
- java 容易犯错_写Java程序最容易犯错误有哪些呢?
- pycharm开启鼠标滚动调节字体大小
- php 怎么输入php ini,PHP怎么找到php.ini配置文件?-php教程
- python 字典 列表 元祖_Python基础之列表、元祖、字典、集合,你都知道吗?附视频...
- 深度学习掩膜_学习资源 | NOAA连接AI与环境科学(九)—海洋环境视频和图像分析教程...
- gdal ImportError: DLL load failed
- spo机试题JAVA_基于龙芯处理器的Java运行环境的移植与优化
- Query 中使用 text() 或者 html() 函数可bai以获取font or td 的内容:
- mysql查询单个员工信息_PHP+MySQL实现模糊查询员工信息功能示例