这是我参与「第四届青训营 」笔记创作活动的第6天
1 消息队列
1.1 消息队列的应用场景
- MQ消息通道
- EventBridge 事件总线
- Data Platform数据流平台
1.1.2 MQ消息通道
消息队列作为消息生产端和消费端的中间环节。
- 异步解耦
- 削峰填谷
- 发布订阅
- 高可用
1.1.3 EventBridge 数据总线
消息队列收集事件源,通过一定规则路由到事件目标中。
事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集。
事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
事件目标:消费事件消息。
1.1.3 Data Platform 流数据平台
- 提供 流/批 数据处理能力
- 各类组件提供各类Connect
- 提供Streaming/Function能力
- 根据数据schema灵活进行数据处理
1.2 主流消息队列
| RabbitMQ | RocketMQ | Kafka | Pulsar | |
|---|---|---|---|---|
| 推出时间 | 2007 | 2012 | 2010 | 2016 |
| 开发语言 | Erlang | Java | Scala/Java | Java |
| 单机吞吐量 | 一般 | 较高 | 高 | 高 |
| 延迟 | 低 | 低 | 一般 | 低 |
| 可用性(分片) | 高(主从架构) | 高(主从架构) | 非常高(分布式) | 非常高(分布式) |
| 一致性 | 较高 | 高 | 高 | 高 |
| 扩展性 | 较高 | 高 | 高 | 高 |
2 Kafka
2.1 Kafka架构介绍
(1) ZooKeeper
- 选举机制:Paxos机制
- 提供一致性:写入和读取
- 提供可用性:一般以上节点存活即可读写
- 提供功能:watch机制/持久临时节点能力
Paxos机制,leader和server节点会投票,获得大部分选票的会成为leader,其他节点会成为server observer是为了扩展读能力产生的节点。 leader节点数据会像server和observer节点进行拷贝。
(2) Broke角色
- 若干个Broker节点组成Kafka集群
- 作为消息的接收模块,使用React网络模型进行消息数据的接收
- 作为消息的持久化模块,进行消息的副本复制以及持久化
- 作为高可用模块,通过副本间的Failover进行高可用保证
(3) Controller选举
- Broker启动会尝试去 zk 中注册controller节点
- 注册上controller节点的broker即为controller
- 其余broker会watch controller节点,一旦异常进行重新注册
2.2 Kafka高可用
副本同步机制
- 通过ISR副本复制机制,提供热备功能
- 写入端提供ack=0 -1 1 机制,控制副本同步强弱
副本切换机制
- 提供clean/unclean副本选举机制