这是我参与「第五届青训营」伴学笔记创作活动的第1天。
消息队列(MQ)指保存消息的一个容器,其本质是一个队列,但这队列需要支持高吞吐,高并发,并且高可用。
消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。
1.消息队列前世今生
1.1 发展历程
1.2 业界消息队列对比
1.3 消息队列的特点
1.3.1 采用异步处理模式
消息发送者 可以发送一个消息而无须等待响应。消息发送者 将消息发送到一条 虚拟的通道(主题 或 队列)上,消息接收者 则 订阅 或是 监听 该通道。一条信息可能最终转发给 一个或多个 消息接收者,这些接收者都无需对 消息发送者 做出 同步回应。整个过程都是 异步的。
1.3.2 应用系统之间解耦合
解耦:
- 发送者和接收者不必了解对方、只需要 确认消息;
- 发送者和接收者 不必同时在线。
比如在线交易系统为了保证数据的 最终一致,在 支付系统 处理完成后会把 支付结果 放到 消息中间件 里,通知 订单系统 修改 订单支付状态。两个系统是通过消息中间件解耦的。
1.4 消息队列传递服务模型
2. 消息队列-Kafka
2.1 使用场景
2.2 如何使用
- 创建一个Kafka集群
- 在这个集群中创建一个Topic,并设置好分片数量
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的HelloWorld发送出去
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的HelloWorld
2.3 基本概念
一个典型的 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 来表示服务代理节点。
- Topic:逻辑队列,一个broker里可以有多个Topic。
- Partition: 通常Topic会有多个分区,同一主题下的不同分区包含的消息是不同的,不同分区之间的消息是可以并发处理的。
Partition:
对于每一个Partition来说,每一条消息都有一个唯一的Offset,是消息在Partition内的相对位置信息,其严格递增。