这是我参与「第四届青训营 」笔记创作活动的第13天。
本节课程内容:
1.消息队列概述,消息队列在各个领域扮演的角色
2.kafka详解,kafka架构解析以及未来演进方向
3.Pulsar详解,Pulsar结构解析以及云原生中的优势
4.周边与生态,消息队列作为数据平台,周边和生态
消息队列的概述
分为两个部分
-
- 消息队列的应用场景
-
- 主流消息队列相关介绍
1. 消息队列的应用场景
MQ消息通道,做上下流解耦,以及发布订阅功能
EventBridge:事件
Data PlatForm:对接会是哪个下游组件,进行数据分析
MQ消息通道
EventBridge 事件总线
把消息定义成一些事件源发布到一些事件集中
事件集传输到服务端,相当于将事件分类,路由到对应的事件目标中,进行事件的消费
Data PlatForm 流数据平台
主流消息队列介绍
Kafka详解
ZooKeeper
ZK的选举机制:Paxos机制选取
Broker
broker是kafkfa中重要角色,Kafka整体集群室友Broker集成的
Broke作为消息的接收模块,使用React网络模型进行消息接收
Broker作为消息的持久化模块,进行消息的副本复制和持久化
一个leader和一个follower是分布在两个Broker中,follower 会从leader中数据同步并持久化到本地磁盘,同时,BRroker作为高可用模块,通过副本的Failover进行高可用保证。
因为Broker是分布式的,我们需要一个中心化结点来做管理和决策
Contrller选举
Controller选举:
- Broker启动时尝试在ZK中注册Controller结点
- 因为ZK提供的写能力是强一致性,相当于抢锁,抢到锁的Broker就是Controller,注册Controller
- 其余的Broker会watch controller结点,结点出现异常则进行重新注册
Controller作用:
- Broker重启/宕机时,负责副本的Failover切换
- Topic创建/删除时,负责Topic meta信息广播
- 集群扩缩容时,进行状态控制
- Partition/Replica 状态机维护
Coordinator
他也是一个特殊的Broker,主要负责消费端的控制
kafka的主要功能是生产者会把消息生产到系统中,consumer会订阅这个tpic进行消费
Coordinator负责topic-partition<->consumer的负载均衡
不同的业务方consumer有不同的需求定制,根据不同的场景提供不同的分配策略:
- Dynamic Memebership Protocol
- Static Membership Protocol
- Incremental Cooperative Rebalance
kafka高可用
- 副本同步机制
- 提供isr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步策略
- 副本切换机制
- 提供clean/unclean副本选举机制
Kafka副本ISR机制
根据数据同步情况规定AR/SR/ISR
Kafka写入Ack机制
- Ack=1
- Leader副本写入成功,Producer即认为成功
- Ack = 0
- oneway模式
- Producer发送后即为成功
- Ack - -1
- ISR中所有副本都成功,Producer才认为写成功
问题:
min.insync.replica = 2 , ack = -1
Kafka 副本同步
ISR之间如何进行副本同步,在同步过程中需要注意的点,同时要两个数值来表示数据的可见性
LEO:log end offset ,日志最末尾的数据
HW:ISR中最小的LEO作为HW;HW的消息为Consumer课件的消息
例如图5,HW选择ISR的Brokre中LEO最小的作为HW
kafka副本选举
- clean选举
- 优先按选取isr中副本作为leader
- 如果isr中无可用副本,则partition不可用
- unclean 选举
- 优先选取isr中副本作为leader
- 如果isr中无可用副本则选择其他存活副本
Kafka集群扩缩容
Kafka集群扩容步骤
- 扩容Broker结点
- 计算均匀的Replica分布拓扑
- Controller负责新的副本分布元数据广播
- Broker负责新副本的数据同步
Kafka集群缩容步骤
- 计算均匀的Replica分布拓扑
- Controller负责新的副本分布元数据广播
- Broker负责新副本的数据同步
- 下线缩容的Broker结点
扩缩容问题
Kafka未来演进之路
Kafka去除ZK依赖
Kafka依赖KRaft
Kafka 运维/调优经验介绍
Kafka单击吞吐
集群参数配置
集群参数配置很关键,对系统的抖动有作用
扩缩容优化
指标可视化
小结
介绍了Kafka的架构核心Broker,以及broker的选举,副本操作。
介绍了Kafka高可用性的机制。
Pulsar详解
- Pulsar架构介绍
- Bookkpeeper介绍
- Pulsar特性介绍
- 洁群HA&Scale-up
- Pulsar vs Kafka
Pulsar架构介绍
客户端:Producer Consumer进行服务发现,消息的生产与消费
交互:Broker与客户端通信,Broker中ML 负责与Bookie通信
Pulsar proxy
proxy可以改变客户端的连接方式
Pulsar Broker
Pulsar Storage
多级存储
Pulsar IO 连接器
Pulsar Functions (轻量级计算框架)
Bookeeper整体架构
优点:一致性较强,延迟较低,长尾延迟更低
ZooKeeper:负责数据存储
bookie:存储载体
BookKeeper 读/写流程:
BookKeeper 基本概念
Ledger: BK的一个基本存储单元
Fragment:BK的最小分布单元,Ledger的组成部分
Entry:每条日志都是一个Entry
BookKeeper新建Ledger
Quorum Write:副本之间没有主从概念,同等地位同时写入
Quorum Size:同时写的个数
quorum 有利于解决长尾延迟问题
BookKeeper Ledger 分布
从Bookie POOL挑选Bookie 构成Ensemble
Write Quorum size 决定发送给那些Bookies
Ack Quorum Size决定收到几个Ack即为成功
BookKeeper 写一致性
数据是以pipline模式写,在写时需要保证顺序,通过LastAddPushed LastAddConfirmed控制
BookKeeper 读一致性
Reader可以读取Entry id 小于或者等于LAC的记录
BokkKpeeper 读写分离
BookKeeper with pulsar
Pulssar 功能介绍
Pulssar生产模式
Pulssar消费模式
Exclusive 消费模式
Fialover 消费模式
Shared 消费模式
Key——shared 消费模式
Pulsar 多租户
消费者对于Pulsar就是租户
Pulsar Plugin
为了支持多种消息队列协议,Pulsar设计了插件兼容
Pulsar GEO Relication
- 跨数据中心复制
- 消费其他地域数据
Pulsar HA & Scale-up
绿色为Topic
左边是一致性哈希环
bundle是左边的四个圆,将哈希环分成四个部分
Topic根据哈希结果落在一致性哈希环上,顺时针归属于不同的Bundle,通过一致性分给bundle
bundle均匀分配给Broker
客户端启动时会通过Broker去lookup topic的路由,看topic归属于那几个Broker上,进行tcp连接进行数据生成和消费
Pulsar vs Kafka
生态周边
Pulsar IO
Kafka Schema
数据格式的补充,如json等
Pulsar sql
涉及到Presto
总结
- 消息队列概述,主流的消息队列 Kafka ,Pulsal
- Kafka的架构,高可用,扩缩容,以及运维调优
- Pulsar的架构,存储层分析,特性介绍,HA&集群扩缩容
- 生态周边
标题:从 Kafka 到 Pulsar:数据流演进之路 | 青训营笔记
网址:juejin.cn/