20 | 分布式通信之发布订阅:送货上门
该思维导图由 AI 生成,仅供参考
什么是发布订阅?
- 深入了解
- 翻译
- 解释
- 总结
分布式通信技术中的发布订阅模式被比喻为“送货上门”,在分布式系统中非常常见。该模式通过消息中心将生产者产生的数据推送给订阅者,实现了一对多的消息传递。与点对点模式相比,发布订阅模式中一个消息可以被多个消费者进行消费,这也是和点对点模式的本质区别。在分布式系统中,通常会为多用户服务,而多个用户通常会关注相同类型的消息,因此发布订阅模式在分布式系统中非常常见。文章还结合了经典的分布式发布订阅消息系统Kafka的发布订阅原理及工作机制,帮助读者深入理解发布订阅模式的原理。 Kafka是一种典型的发布订阅消息系统,其系统架构包括生产者、消费者和消息中心三部分。生产者负责发布消息到消息中心,消费者向消息中心订阅自己感兴趣的消息,消息中心负责存储生产者发布的消息和管理消费者订阅信息,根据消费者订阅信息,将消息推送给消费者。Kafka的架构图展示了其集群结构,包括Producer、Broker、Consumer和ZooKeeper集群。ZooKeeper集群用来协调和管理Broker和Consumer,实现了Broker和Consumer的解耦,并为系统提供可靠性保证。 在Kafka中,为了解决消息存储的负载均衡和系统可靠性问题,引入了主题和分区的概念。主题是一个逻辑概念,指的是消息类型或数据类型,而分区则实现了负载均衡和消息备份。此外,Kafka中的消费组实现了多个消费者的集合,共同消费主题消息,避免了消费效率过低导致系统故障的问题。 发布订阅模式的关键特征包括实现了系统解耦、易于维护,以及实现了异步执行,避免高负载。与观察者模式相比,发布订阅模式采用了间接通信,引入了消息中心,实现了订阅者与发布者的解耦。观察者模式则采用了直接通信,通信时延会低一些,但依赖关系比较强。 总的来说,本文深入探讨了分布式发布订阅模式的原理和Kafka系统的工作机制,为读者提供了全面的技术视角和实践应用,帮助读者快速了解分布式通信技术中的发布订阅模式及其在实际系统中的应用。
《分布式技术原理与算法解析》,新⼈⾸单¥59
全部留言(25)
- 最新
- 精选
- Devin文章中 “实现消息的备份,从而保证系统的高可靠。比如,Topic 1 包含两个分区 Partiton-0、Partiton-1,每个分区内容一致实现消息的备份,从而保证系统的高可靠。比如,Topic 1 包含两个分区 Partiton-0、Partiton-1,每个分区内容一致”,这个说法应当是有误的,“实现消息的备份”应该是“副本机制”,假如Topic 1 分区数是 2 ,那么总消息是 Partiton-0 和 Partiton-1 的合集,不是文中说的“每个分区内容一致”
作者回复: 这里介绍的是分区的功能或作用,不同分区存储不同数据子集,以及不同分区存储相同数据作为数据备份都可以看成是分区的作用
2019-11-1643 - chen其实之所以能实现负载均衡,消费组也是个重要的因素,老师没有说啊
作者回复: 这个问题非常好,确实消费组在一定程度上能实现负载均衡,本章留下的思考问题就是想大家在思考后在留言区能一起讨论起来。
2020-05-082 - 88591增加消费者数量,可以提高处理速度
作者回复: 一定程度上是可以的
2020-04-031 - 阿星Kafka的partition和replica搞混了吧? 副本才是实现备份机制的吧,分区是实现了负载均衡和水平扩展2019-11-13930
- Eternal发布订阅的时候,如果是消费者主动拉去消息,是拉模式,如果是消息中心推送消息给消费者就是推模式。 推模式:消息中心需要考虑消费者的消费能力,不能把消费者压垮了,站着消息中心的角度,这个样消息中心能控制消费的速度,也能主动调控消息消费的积压,对消息中心是有利的,对消费者是有风险的; 拉模式:由消费者自己控制自己的消费速度,不用担心自己压力;站在消费者的角度,自己控制消费速度,有多到能力干多大事,自己的风险自己掌控,这样消息中心的消息积压就会存在风险,因为消息消费的速度自己不能控制,很容易造成消息积压,然后消息丢失,或消息中心不可用。 消息中心是两头都有风险,生产者的生产速度变化,消费者的消费速度变化都会造成消息积压风险,因为消息中心的消息存储能力,通信能力都是由限制的,消息中心是发布订阅模式中最复杂的一部分2019-11-0918
- EternalKafka订阅的时候,客户端不需要考虑订阅哪个分区 当一个消费者组的消费者数量小于分区数量的时候是消费能力不足,该组中的一个消费者会超负载消费,存在挂掉风险 当一个消费者组的消费者数量大于分区数量的时候是分区的数量不足,该组中的一个消费者会存在空负载的情况,消费资源浪费 因此,一般一个消费者组的消费者数量和该组订阅的topic的分区数量一致,或者是成倍数。 成倍数是: 如果一个topic有3个分区,那么消费者组的消费者可以是,3个,6个,9个,这样一个组中的每个消费者就会均衡 如果一个消费者组的消费者数量是3个,那么他们订阅的topic的分区数量可以是是,3个,6个,9个,这样一个组中每个消费者消费的分区会均衡 如果一个消费者组中的消费者数量和组订阅的topic中的分区数量不成倍数,会存在问题: 当消费者挂掉,或者新的消费者加入组的时候,当分区数量新增或减少的时候,都会触发重平衡,即消费者和分区数量映射的重平衡 重平衡如果不均衡就会导致消费者负载过高,消费慢,也会造成topic消息积压,所有关键的问题说就是要使消费者和分区怎么均衡映射2019-11-094
- 钱阅过留痕 分布式系统三剑客:RPC、MQ、REDIS 上节是 是RPC这节是MQ,RPC核心是系统解藕,远程调度简易化,有返回值。MQ的核心也是解藕,而且更加的彻底,另外,就是削峰填谷。 关于RPC和MQ都需要一整个专栏来介绍,越来越感觉老师这里,有些科普的感受。不过比较集中和系统的介绍了一下,这方面的内容也挺好,定位问题吧! 为了加深理解,来个比喻: 点对点——类似一个母鸡在鸡窝里下了一个蛋,不论家里的谁,拿走了,就是拿走了就没有了 发布订阅——类似农村电线杆子上贴的一个广告,整村的人都可以看,都看到了,他的效果也就没有了 有关MQ的高频问题有如下几个: 消息少发?多发?怎么处理?顺序消息怎么实现?大量消息积压,且需要及时消费,怎么处理?2020-02-182
- JackeyKafka的消费者组有点像思考题提到的订阅者负载均衡,不过应该是分区数大于消费者数才会进行多个消费者消费吧。所以是否可以考虑订阅时不仅仅是指定主题,而是需要指定到具体的分区?2019-11-062
- 趁早真的是太多的介绍性内容了,感觉干活真的好少哈2021-09-041
- 修愿三秋Broker的数据存储是否溢出和Consumer 消费数据的能力没有什么关系的,俩组件是独立的,互不影响2019-11-2021