这是我参与「第四届青训营」笔记创作活动的第12天。
消息队列概述
消息队列应用场景
-
MQ 消息通道:异步解耦、削峰填谷、高可用、发布订阅
-
EventBridge 事件总线:事件源、事件集、事件目标
- Data Platform 数据流平台:提供批/流数据处理能力、各类组件提供各类Connect、提供 Streaming/Function能力、根据数据schema灵活的进行数据预处理
主流消息队列介绍
- RabbitMQ
- RocketMQ
- Kafka
- Pulsar
Kafka
Kafka架构
- Zookeeper
提供—致性、可用性,提供watch机制、持久/临时节点能力。
- Broker& Controller (特殊的Broker)
- Coordinator
Kafka高可用
副本同步机制
- 提供lsr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步强弱
副本切换机制
- 提供clean / unclean副本选举机制
Kafka副本 ISR 机制
-
AR - Assign Replica,已经分配的所有副本
-
OSR - Out Sync Replica,很久没有同步数据的副本
-
ISR 一直都在同步数据的副本, 可以作为热备进行切换的副本,min.insync.replicas最少isr数量配置
Kafka写入 Ack 机制
-
Ack = 1: Leader 副本写入成功,Producer 即认为写成功
-
Ack = 0: OneWay 模式,Producer 发送后即为成功
-
Ack = -1:ISR中所有副本都成功,Producer 才认为写成功
Kafka集群扩缩容
Kafka集群扩缩容之后的目标
- Topic维度:partition 在各个broker 之间分布是均匀的 流量。每个broker网卡出入流磁盘均衡;同一个partition 的replica 不会分布在一台broker
- Broker 维度:Broker之间replica的数量是均匀的。
Kafka集群扩容步骤
-
扩容Broker节点: Leader副本写入成功,Producer即成功
-
计算均衡的Replica分布拓扑:保证Topic的partition在 broker间分布均匀;保证 Broker 之间Replica分布均匀
-
Controller负责新的副本分布元数据广播: Controller将新的leader/follower 信息广播给broker.
-
Broker负责新副本的数据同步:Broker上有需要同步数据的副本则进行数据同步
Kafka集群缩容步骤
-
计算均衡的Replica分布拓扑:保证Topic的partition在 broker间分布均匀;保证 Broker之间Replica分布均匀
-
Controller负责新的副本分布元数据广播: Controller将新的leaderlfollower信息广播给broker
-
Broker负责新副本的数据同步:Broker上有需要同步数据的副本则进行数据同步
-
下线缩容的Broker节点: 数据同步完毕之后下线缩容的Broker节点
Kafka 演进之路
依赖ZooKeeper存在的问题
-
元数据存取困难
-
元数据更新网络开销大
-
强耦合违背软件设计原则
-
网络分区复杂度高
-
并发访问ZooKeeper问题多
Kafka运维/调优经验介绍
-
单机吞吐
-
参数配置
-
指标可视化
-
扩缩容优化
Pulsar
Pulsar架构介绍
- Pulsar Proxy
- Pulsar Broker
- Pulsar Storage
- Pulsar lO
- Pulsar Functions
bookkeepr介绍
基本概念
-
Ledger: BK的一个基本存储单元,BK Client的读写操作都是以Ledger为粒度的。
-
Fragment: BK的最小分布单元(实际上也是物理上的最小存储单元),也是Ledger的组成单位,默认情况下一个Ledger会对应的一个 Fragment (一个 Ledger也可能由多个Fragment组成)。
-
Entry: 每条日志都是一个 Entry,它代表一个record,每条record都会有一个对应的entry id。
Pulsar 功能特性
生产模式
消费模式
多租户
Pulsar vs Kafka
存储架构
- 存储计算分离之后带来的优劣势
- 多层架构,状态分离之后的优势
运维操作
- 应对突发流量变化,集群扩缩容是否便捷
- 运维任务是否影响可用性
- 集群部署是否灵活
功能特性
- 多语言&多协议
- 多租户管理
- 生产消费模式
分层架构优势
- 流量代理层和数据存储层解耦
- 流量代理层无状态,可快速扩缩容
- 流量代理层可以对接海量的客户端连接
- 存储层负责数据存储,可以使用多级存储
存储层
- 按照数据冷热进行存储介质区分,降低成本·历史数据可海量保存,数据无价
- 可直接通过存储层接口读取数据,批式计算
计算层
- 对于写入的数据,可以做预处理,简单ETL
- 可以做数据缓存,应对高扇出度场景
- 无状态,扩缩容之后,能快速完成负载均衡Balance
总结
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。pulsar相对kafka而言,优势在于broker无状态支持更低成本扩容,无须重新分配现有数据。 同时提供分层存储,支持多租户。地域复制更加友好,基于仲裁的算法能保障集群是一致的。