发送消息分配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触发条件
  1. ConsumerGroup里的Consumer发生变更(主动加入、主动离开、崩溃)
    崩溃不一定就是指 consumer进程"挂掉"、 consumer进程所在的机器宕机、长时间GC、网络延迟,当 consumer无法在指定的时间内完成消息的处理,那么coordinator就认为该 consumer已经崩溃,从而引发新一轮 rebalance
  2. 订阅topic(主题)的数量发生变更。
    比如使用正则表达式的方式订阅,当匹配正则表达式的新topic被创建时则会触发 rebalance。
  3. 订阅topic(主题)的partition(分区)数量发生变更。
    比如使用命令行脚本增加了订阅 topic 的分区数

在rebalance(再均衡)期间,Consumer(消费者)无法读取消息,造成整个Consumer(消费者)一段时间的不可用

  • rebalance 策略

默认提供了 3 种分配策略,分别是 range 策略、round-robin策略和 sticky策略,可以通过partition.assignment.strategy参数指定。

Group leader 是第一个加入Consumer Group的Consumer,它负责Consumer Rebalance的执行。

  1. range策略
    将单个 topic 的所有分区按照顺序排列,然后把这些分区划分成固定大小的分区段并依次分配给每个 consumer。
  1. round-robin 策略
    把所有 topic 的所有分区顺序摆开,然后轮询式地分配给各个 consumer
  1. sticky策略
    (0.11.0.0后引入)有效地避免了上述两种策略完全无视历史分配方案的缺陷。采用了"有黏性"的策略对所有 consumer 实例进行分配,可以规避极端情况下的数据倾斜并且在两次 rebalance间最大限度地维持了之前的分配方案

kafka consumer、partition、rebalance相关推荐

  1. kafka中topic、partition、broker、consumerGroup、consumer之间的关系、区别及存在意义

    概念理解 topic: 逻辑概念,用于联系Producer 和 Consumer的message生产和消费.Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的 ...

  2. 排序函数(sort、sorted、argsort、lexsort、partition、argpartition、searchsorted)

    list.sort 通过对提供的数组进行就地修改来返回已排序的数组.因此,元素数组将被修改. numpy.sort(ndarray.sort与之类似) 使用numpy.sort函数可以对数组进行排序, ...

  3. kafka中Topic、Partition、Groups、Brokers概念辨析

    kafka消息队列有两种消费模式,分别是点对点模式和订阅/发布模式.具体比较可以参考Kafka基础–消息队列与消费模式. 下图是一个点对点的Kafka结构示意图,其中有以下几个部分: producer ...

  4. kafka架构组件概念详解:Broker、Topic、Partition、Leader/Follower、Consumer Group、zookeeper

    消息队列mq的两种模式 发布订阅模式分为两种:①队列推送数据(消费者能力不平均):②消费者拉取消息(要维护一个长轮询).kafka属于消费者主动拉取数据的模式. kafka架构 Broker kafk ...

  5. Flink实时数据处理实践经验(Flink去重、维表关联、定时器、双流join)

    Flink实时数据处理实践经验 文章目录 Flink实时数据处理实践经验 1. 数据输入与预处理 2. 实时数据处理 3. 实时数仓架构 4. 优化方案 Java.大数据开发学习要点(持续更新中-) ...

  6. BigData之Hive:Hive数据管理的简介、下载、案例应用之详细攻略

    BigData之Hive:Hive数据管理的简介.下载.案例应用之详细攻略 目录 Hive数据管理的简介 1.Hive的适用场景--不适合那些需要高实性的应用(不能够在大规模数据集上实现低延迟快速的查 ...

  7. Python基础——字符串、列表、元组

    字符串常用方法 主要包括:replace.find.count.split.partition.upper.lower.strip.join.format - replace(old,new) 对字符 ...

  8. Python基础学习笔记-05字符串、列表、推导式;老师工位随机分配random.shuffle()、算术运算打分例题;

    字符串.列表.推导式 python数据类型: #可变数据: 列表List.字典Dictionary.集合Set . #不可变数据:数值Number(int.float.bool.complex).字符 ...

  9. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)

    ##1. Kafka整体结构图 Kafka名词解释和工作方式  Producer : 消息生产者,就是向kafka broker发消息的客户端.  Consumer : 消息消费者,向kafka ...

最新文章

  1. git 使用及常用命令
  2. java实现zip与unzip
  3. 进去springstrap显示无响应_2020年,28寸IPS面板4K显示器合集,推荐几款代表性的...
  4. shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join
  5. dom4j 解析xml
  6. c++ opengl 分形树_推荐一些适合新手练手的C/C++项目,小白练手最适合!
  7. ABAP中的枚举对象
  8. matlab2013a文件安装密钥,Matlab2013a软件安装教程
  9. 捷联惯导基础知识解析之二(捷联惯导更新算法和误差方程)
  10. python支付系统开发_python实现银联支付和支付宝支付接入
  11. 指数波段划分以及底部反弹行业特征统计分析
  12. COSCon'20 Apache Roadshow- China 精彩收官!|城市回顾篇
  13. 2015年国际数学奥林匹克(IMO)试题
  14. php 打印 加标题,打印每页都有标题怎么设置
  15. 计算机组成原理复习要点与考题类型--选择-填空-分析-计算-简答
  16. mq常见学习问题总结笔记
  17. 微信小程序 textarea读取到的文本换行问题 以及保存回车换行到后台
  18. 基于Gitlab Issues为导向的分支管理
  19. 加速度频域积分的实现及其局限性分析
  20. php股票预警,超强的盘中预警公式

热门文章

  1. C语言之fileno函数
  2. 从Python安装到语法基础,这才是小白都能懂的爬虫教程
  3. centos7是哪种版本Linux,centos7发行版号对应基于RHEL Source(版本)对照表
  4. sonarqube中怎么添加阿里java开发规范
  5. ajax http415,Unsupported Media Type 415问题解决办法(Ajax)
  6. 基于seq2seq的机器翻译系统
  7. MPEG-CDVA标准的特征提取(除深度学习) 视频匹配 视频检索
  8. java的synthetic_java synthetic关键字
  9. C# 每天定时执行任务(每天凌晨8点执行)
  10. mysql是关系型数据库吗_mysql属于关系型数据库吗