大数据 -- 发布订阅模式

消息 + 消息队列

  1. 在分布式架构中,各个组件通过发送消息来互相通信,消息可以是任意格式
  2. 消息队列在发布订阅模式中起到一个持久化缓冲(Durable Buffer)的作用
    • 消息的发送方可以发送任意消息至这个消息队列中,消息队列在接收到消息之后会将消息保存起来
    • 直到消息的接收方确认已经从这个消息队列中拿到了这条消息,才会将这条消息从消息队列中删除

发布订阅模式

  1. 发布订阅模式:消息的发送方可以将消息异步地发送给一个系统中的不同组件,而无需知道接收方是谁
  2. 发送方被称为发布者(Publisher),接收方被称为订阅者(Subscriber)
  3. 在发布订阅模式里,可以有任意多个发布者发送消息,也可以有任意多个订阅者接收消息

优点

  1. 松耦合:消息的发布者和消息的订阅者在开发的时候完全不需要事先知道对方的存在,可以独立地进行开发
  2. 高伸缩性:发布订阅模式中的消息队列可以独立的作为一个数据存储中心存在
    • 在分布式环境中,消息队列可以扩展至上千台服务器
  3. 组件间通信更简洁:不需要为每个消息的订阅者定制专门的消息格式

缺点

  1. 不能保证发布者发送的消息一定会送达订阅者,如果保证送达,需要开发者自己实现响应机制

Apache Kafka

  1. 消息的发送方被称为Producer,消息的接收方被称为Consumer,消息队列被称为Topic
  2. Apache Kafka在判断消息是否被接收方接收时利用了Log Offset机制
    • 假设发送方连续发送5条数据到消息队列Topics中,这5条消息被编码为10000、10001、10002、10003、10004
    • 如果接收方读取数据之后回应消息队列它接收到的Log Offset是10000、10001、10003
    • 那么消息队列会认为接收方最多只接收了消息10000和10001,剩下的消息10002、10003、10004会继续发送给接收方

适用场景

  1. 系统的发送方需要向大量的接收方广播消息
  2. 系统中某一组件需要与多个独立开发的组件或服务进行通信
    • 这些独立开发的组件或服务可以使用不同的编程语言和通信协议
  3. 系统的发送方在向接收方发送消息之后无需接收方进行实时响应
  4. 系统中对数据一致性的要求只需要支持数据的最终一致性(Eventual Consistency)模型
0%