消息队列 | 青训营笔记

124 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第1天。

消息队列(MQ)指保存消息的一个容器,其本质是一个队列,但这队列需要支持高吞吐高并发,并且高可用

消息队列

消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合可靠投递广播流量控制最终一致性 等一系列功能。

1.消息队列前世今生

1.1 发展历程

image.png

1.2 业界消息队列对比

image.png

1.3 消息队列的特点

1.3.1 采用异步处理模式

消息发送者 可以发送一个消息而无须等待响应。消息发送者 将消息发送到一条 虚拟的通道主题 或 队列)上,消息接收者 则 订阅 或是 监听 该通道。一条信息可能最终转发给 一个或多个 消息接收者,这些接收者都无需对 消息发送者 做出 同步回应。整个过程都是 异步的

1.3.2 应用系统之间解耦合

解耦:

  1. 发送者和接收者不必了解对方、只需要 确认消息
  2. 发送者和接收者 不必同时在线

比如在线交易系统为了保证数据的 最终一致,在 支付系统 处理完成后会把 支付结果 放到 消息中间件 里,通知 订单系统 修改 订单支付状态。两个系统是通过消息中间件解耦的。

1.4 消息队列传递服务模型

image.png

2. 消息队列-Kafka

2.1 使用场景

image.png

2.2 如何使用

  1. 创建一个Kafka集群
  2. 在这个集群中创建一个Topic,并设置好分片数量
  3. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的HelloWorld发送出去
  4. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的HelloWorld

2.3 基本概念

image.png

一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个 ZooKeeper 集群,如图所示。其中 ZooKeeper 是 Kafka 用来负责集群元数据的管理、控制器 的选举等操作的。Producer 将消息发送到 Broker,Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并消费消息。

整个 Kafka 体系结构中引入了以下 3 个术语。

  • Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到 Kafka 中。

  • Consumer:消费者,也就是接收消息的一方。消费者连接到 Kafka 上并接收消息,进 而进行相应的业务逻辑处理。

  • Broker:服务代理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言, 我们更习惯使用首字母小写的 broker 来表示服务代理节点。

image.png

  • Topic:逻辑队列,一个broker里可以有多个Topic。
  • Partition: 通常Topic会有多个分区,同一主题下的不同分区包含的消息是不同的,不同分区之间的消息是可以并发处理的。

Partition:

image.png

对于每一个Partition来说,每一条消息都有一个唯一的Offset,是消息在Partition内的相对位置信息,其严格递增。

参考

浅谈消息队列及常见的消息中间件

Kafka 科普