这是我参与「第四届青训营 」笔记创作活动的第11天
1. 消息队列概述
1.1. 消息队列的应用场景
1.1.1. MQ 消息通道
1.1.2. EventBridge 数据总线
事件源
- 将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集
事件集
- 存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标
事件目标
- 消费事件消息
1.1.3. Data Platform 数据流平台
- 提供 流/批 数据处理能力
- 各类组件提供各类Connect
- 提供Streaming/Function 能力
- 根据数据schema灵活的进行数据预处理
1.2. 主流消息队列的相关介绍
2. Kafka 详解
2.1. Kafka 架构介绍
2.1.1. Zookeeper
- 选举机制:Paxos 机制
- 提供一致性:写入读取
- 提供可靠性:一半以上节点存活即可读写
- 提供功能:watch机制,持久/临时节点能力
Kafka 存储数据:
- Broker Meta 信息(临时节点)
- Controller 信息(临时节点)
- Topic 信息(持久节点)
- Config 信息(持久节点)
2.1.2. Broker
Broker 角色:
- 若干个Broker节点组成Kafka集群
- Broker作为消息的接收模块,使用React网络模型进行消息数据的接收
- Broker作为消息的持久化模块,进行消息的副本复制以及持久化
- Broker作为高可用模块,通过副本间的Failover进行高可用保证
2.1.3.2. Controller 选举
- Broker 启动会尝试去zk中注册controller节点
- 注册上controller节点的broker即为controller
- 其余broker回watch controller节点,节点出现异常则进行重新注册
2.1.3.2. Controller 作用
- Broker重启/宕机时,负责副本的Failover切换
- Topic创建/删除时,复制Topic meta信息广播
- 集群扩缩容时,进行状态控制
- Partition/Replica状态机维护
2.1.4. Coordinator
- 负责topic-partition <-> consumer 的负载均衡
- 根据不同的场景提供不同的分配策略
- Dynamic Membership Protocol
- Static Membership protocol
- Incremental Cooperative Rebalance
2.2. Kafka 高可用
- 副本同步机制
- 提供lsr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步强弱
- 副本切换机制
- 提供clean/unclean副本选举机制
2.2.1. Kafka副本ISR机制
2.2.2. Kafka写入Ack机制
- Ack = 1
- Leader副本写入成功,Producer即认为写成功
- Ack = 0
- OneWay模式
- Producer发送后即为成功
- Ack = -1
- ISR中所有副本都成功,Producer才认为写成功
2.2.3. Kafka 副本同步
2.2.3. Kafka 副本选举
3.1.1. Kafka 集群扩缩容
3.1.2. Kafka 集群扩容步骤
3.1.2. Kafka 集群缩容步骤
3.1.2. Kafka 集群扩缩容问题
4.1. Kafka 未来演进之路
4.1.1. Kafka 去除 zookeeper依赖
4.1.2. Kafka依赖KRaft
5.1. Kafka 运维/调优经验介绍
5.1.1. Kafka 单机吞吐
5.1.2. Kafka 集群参数配置
5.1.3. 扩缩容优化
3. Pulsar 详解
3.1. Pulsar 架构介绍
3.1.1. Pulsar Proxy
- Pulasar 客户端连接集群的两种方式
- Pulsar Client -> Broker
- Pulsar Client -> Proxy
- Pulsar Proxy
- 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
- Proxy提供类似GateWay代理能力,解耦客户端和Broker,保障Broker安全
3.1.2. Pulsar Broker
3.1.3. Pulsar Storage
3.1.4. Pulsar IO 连接器
3.1.5. Pulsar Functions(轻量级计算框架)
3.2.1. Bookeeper 整体架构
3.2.2. Bookkeeper 基本概念
3.2.3.1. Bookkeeper 新建Ledger
3.2.3.2. Bookkeeper Ledger 分布
3.2.4.2. Bookkeeper 写一致性
3.2.4.3. Bookkeeper 读一致性
3.2.4.1. Bookkeeper 读写分离
3.2.5. Bookkeeper with pulsar
3.3. Pulsar功能介绍
3.3.1. Pulsar 生产模式
3.3.2. Pulsar 消费模式
3.3.2.1. Exclusive 消费模式
- 独占订阅(Stream流模型)
- 独占订阅中,在任何时间,一个消费者组(订阅)中有且只有一个消费者来消费Topic中的消息
3.3.2.2. Failover 消费模式
- 故障切换(Stream流模型)
- 使用故障切换订阅,多个消费者可以附加到同一订阅。但是,一个订阅中的所有消费者,只会有一个消费者被选为该订阅的主消费者。其他消费者将被指定为故障转移消费者。
3.3.2.3. Shared 消费模式
- 共享订阅(Queue队列模型)
- 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以循环分发的形式发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者
3.3.2.4. Key_Shared 消费模式
- 按Key共享订阅(Queue队列模型)
- 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以key-hash发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者