内容简介:消费者从属于消费者群组。一个群组里的消费者
消费者从属于消费者群组。一个群组里的消费者 订阅的是同一个主题 , 每个消费者接收主题一部分分区的消息
消费者横向扩展
1个消费者
- 主题T1有4个分区,然后创建消费者C1,C1是消费者群组G1里唯一的消费者,C1订阅T1
- 消费者C1将接收主题T1的全部4个分区的消息
2个消费者
- 如果群组G1新增一个消费者C2,那么每个消费者将 分别从两个分区接收消息
- 假设C1接收分区0和分区2的消息,C2接收分区1和分区3的消息
4个消费者
- 如果群组G1有4个消费者,那么每个消费者可以分配到一个分区
5个消费者
- 如果群组G1有5个消费者, 超过主题的分区数量 ,那么有1个消费者就会被 闲置 ,不会接收到任何消息
总结
- 往群组里增加消费者是 横向伸缩消费能力 的主要方式
- 消费者经常会做一些高延迟的操作,比如把数据写到数据库或HDFS,或者使用数据进行比较耗时的计算
- 有必要 为主题创建大量的分区 ,在负载增长时可以加入更多的消费者
- 不要让 消费者的数量超过主题分区的数量 ,多余的消费者只会被 闲置
消费者群组横向扩展
- Kafka设计的主要目标之一,就是要让Kafka主题里的数据能够满足企业各种应用场景( 不同的消费者群组 )的需求
- 在这些场景里,每个应用程序可以获取到 所有的消息 ,而不只是其中的一部分
- 只要保证每个应用程序有自己的消费者群组,就可以让它们获取到主题所有的消息
- 不同于传统的消息系统, 横向伸缩Kafka消费者和消费者群组并不会对性能造成负面影响
消费者群组+分区再均衡
分区再均衡
- 分区再均衡: 分区的所有权从一个消费者转移到另一个消费者
- 分区再均衡非常重要,它为消费者群组带来了 高可用性 和 伸缩性 (可以放心地添加或移出消费者)
- 在分区再均衡期间, 消费者无法读取消息 ,造成整个群组一小段时间内不可用
- 当分区被重新分配给另一个消费者时,消费者当前的读取状态会丢失,它有可能需要去刷新缓存,在它重新恢复状态之前会拖慢应用程序
心跳
- 消费者通过向被指派为 群组协调器 的Broker( 不同的群组可以有不同的协调器 )发送 心跳 来维持它们 和群组的从属关系 以及它们 对分区的所有权关系
- 只要消费者以 正常的时间间隔 发送心跳,就被认为是 活跃 的,说明它还在读取分区里的消息
- 消费者发送心跳的时机
- 轮询消息 (为了获取消息)
- 提交偏移量
- 如果消费者停止发送心跳的时间足够长,会话就会过期,群组协调器认为它已经死亡,就会触发一次再均衡
- 如果一个消费者发生崩溃,并停止读取消息,群组协调器会等待几秒钟,确认它死亡了才会触发再均衡
- 在这几秒的时间内,死掉的消费者不会读取分区里的消息
- 在清理消费者时,消费者会 通知 协调器它将要离开群组,协调器会 立即 触发一次再均衡,尽量 降低处理停顿
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- PyTorch 学习笔记(一):让 PyTorch 读取你的数据集
- 印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析
- Tensorflow数据读取指南
- Python如何读取文件
- Java实时读取日志文件
- 如何读取一个.ini文件?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby元编程(第2版)
[意] Paolo Perrotta / 廖志刚 / 华中科技大学出版社 / 2015-8-1 / 68.80
《Ruby元编程(第2版)》在大量剖析实例代码的基础上循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby类库的实现细节,作者不仅向读者展示了元编程的优势及其解决问题的方式,更详细列出33种发挥其优势的编程技巧。本书堪称动态语言设计模式。Ruby之父松本行弘作序推荐。一起来看看 《Ruby元编程(第2版)》 这本书的介绍吧!