kafka consumer、partition、rebalance
发送消息分配partition
Producer发送消息到Topic时,分配partition的算法如下:
如果指定了一个partition,那么直接使用指定的partition
如果没有指定partition,但是指定了key,那么会根据key进行哈希,分配到对应的partition中
如果partition和key都没指定,会使用round-robin算法进行分配
consumer和partition的关系
一个partition只能被同组的一个consumer消费,同组的consumer则起到均衡效果。
Case1. 消费者多于partition
即同一个partition内的消息只能被同一个组中的一个consumer消费,当消费者数量多于partition的数量时,多余的消费者空闲。Case2. 消费者少于partition
多个partition对应一个消费者Case3. 消费者等于partition
一个partition对应一个消费者Case4. 多个消费者组
启动多个组,每个组都可以消费所有的消息
组与组之间的消息是否被消费是相互隔离互不影响的。
Consumer Rebalance
- Consumer Rebalance触发条件
- ConsumerGroup里的Consumer发生变更(主动加入、主动离开、崩溃)
崩溃不一定就是指 consumer进程"挂掉"、 consumer进程所在的机器宕机、长时间GC、网络延迟,当 consumer无法在指定的时间内完成消息的处理,那么coordinator就认为该 consumer已经崩溃,从而引发新一轮 rebalance - 订阅topic(主题)的数量发生变更。
比如使用正则表达式的方式订阅,当匹配正则表达式的新topic被创建时则会触发 rebalance。 - 订阅topic(主题)的partition(分区)数量发生变更。
比如使用命令行脚本增加了订阅 topic 的分区数
在rebalance(再均衡)期间,Consumer(消费者)无法读取消息,造成整个Consumer(消费者)一段时间的不可用
- rebalance 策略
默认提供了 3 种分配策略,分别是 range 策略、round-robin策略和 sticky策略,可以通过partition.assignment.strategy参数指定。
Group leader 是第一个加入Consumer Group的Consumer,它负责Consumer Rebalance的执行。
- range策略
将单个 topic 的所有分区按照顺序排列,然后把这些分区划分成固定大小的分区段并依次分配给每个 consumer。
- round-robin 策略
把所有 topic 的所有分区顺序摆开,然后轮询式地分配给各个 consumer
- sticky策略
(0.11.0.0后引入)有效地避免了上述两种策略完全无视历史分配方案的缺陷。采用了"有黏性"的策略对所有 consumer 实例进行分配,可以规避极端情况下的数据倾斜并且在两次 rebalance间最大限度地维持了之前的分配方案
kafka consumer、partition、rebalance相关推荐
- kafka中topic、partition、broker、consumerGroup、consumer之间的关系、区别及存在意义
概念理解 topic: 逻辑概念,用于联系Producer 和 Consumer的message生产和消费.Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的 ...
- 排序函数(sort、sorted、argsort、lexsort、partition、argpartition、searchsorted)
list.sort 通过对提供的数组进行就地修改来返回已排序的数组.因此,元素数组将被修改. numpy.sort(ndarray.sort与之类似) 使用numpy.sort函数可以对数组进行排序, ...
- kafka中Topic、Partition、Groups、Brokers概念辨析
kafka消息队列有两种消费模式,分别是点对点模式和订阅/发布模式.具体比较可以参考Kafka基础–消息队列与消费模式. 下图是一个点对点的Kafka结构示意图,其中有以下几个部分: producer ...
- kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper
消息队列mq的两种模式 发布订阅模式分为两种:①队列推送数据(消费者能力不平均):②消费者拉取消息(要维护一个长轮询).kafka属于消费者主动拉取数据的模式. kafka架构 Broker kafk ...
- Flink实时数据处理实践经验(Flink去重、维表关联、定时器、双流join)
Flink实时数据处理实践经验 文章目录 Flink实时数据处理实践经验 1. 数据输入与预处理 2. 实时数据处理 3. 实时数仓架构 4. 优化方案 Java.大数据开发学习要点(持续更新中-) ...
- BigData之Hive:Hive数据管理的简介、下载、案例应用之详细攻略
BigData之Hive:Hive数据管理的简介.下载.案例应用之详细攻略 目录 Hive数据管理的简介 1.Hive的适用场景--不适合那些需要高实性的应用(不能够在大规模数据集上实现低延迟快速的查 ...
- Python基础——字符串、列表、元组
字符串常用方法 主要包括:replace.find.count.split.partition.upper.lower.strip.join.format - replace(old,new) 对字符 ...
- Python基础学习笔记-05字符串、列表、推导式;老师工位随机分配random.shuffle()、算术运算打分例题;
字符串.列表.推导式 python数据类型: #可变数据: 列表List.字典Dictionary.集合Set . #不可变数据:数值Number(int.float.bool.complex).字符 ...
- Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)
##1. Kafka整体结构图 Kafka名词解释和工作方式 Producer : 消息生产者,就是向kafka broker发消息的客户端. Consumer : 消息消费者,向kafka ...
最新文章
- git 使用及常用命令
- java实现zip与unzip
- 进去springstrap显示无响应_2020年,28寸IPS面板4K显示器合集,推荐几款代表性的...
- shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join
- dom4j 解析xml
- c++ opengl 分形树_推荐一些适合新手练手的C/C++项目,小白练手最适合!
- ABAP中的枚举对象
- matlab2013a文件安装密钥,Matlab2013a软件安装教程
- 捷联惯导基础知识解析之二(捷联惯导更新算法和误差方程)
- python支付系统开发_python实现银联支付和支付宝支付接入
- 指数波段划分以及底部反弹行业特征统计分析
- COSCon'20 Apache Roadshow- China 精彩收官!|城市回顾篇
- 2015年国际数学奥林匹克(IMO)试题
- php 打印 加标题,打印每页都有标题怎么设置
- 计算机组成原理复习要点与考题类型--选择-填空-分析-计算-简答
- mq常见学习问题总结笔记
- 微信小程序 textarea读取到的文本换行问题 以及保存回车换行到后台
- 基于Gitlab Issues为导向的分支管理
- 加速度频域积分的实现及其局限性分析
- php股票预警,超强的盘中预警公式
热门文章
- C语言之fileno函数
- 从Python安装到语法基础,这才是小白都能懂的爬虫教程
- centos7是哪种版本Linux,centos7发行版号对应基于RHEL Source(版本)对照表
- sonarqube中怎么添加阿里java开发规范
- ajax http415,Unsupported Media Type 415问题解决办法(Ajax)
- 基于seq2seq的机器翻译系统
- MPEG-CDVA标准的特征提取(除深度学习) 视频匹配 视频检索
- java的synthetic_java synthetic关键字
- C# 每天定时执行任务(每天凌晨8点执行)
- mysql是关系型数据库吗_mysql属于关系型数据库吗