这是我参与「第四届青训营」笔记创作活动的第3天,学习内容为《从Kafka到Pulsar:数据流演讲之路》
课程概述
- 介绍了消息队列的内容
- 介绍了Kafka的背景、实现、应用
- 介绍了Pulsar的实现和应用
详细介绍
消息队列概述
1.1 消息队列的应用场景
-
MQ信息通道
- 异步解藕:下游无需关注上游
- 削峰填谷:数据可以储存
- 发布订阅
- 高可用:解藕小模块,各模块独立可用
-
EventBridge事件总线
- 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的时间信息发布到事件集
- 事件集:存储接受的事件信息,并根据事件规则将事件信息路由到事件目标
- 事件目标
-
DataPlatform流数据平台
- 提供批/流数据处理能力
- 各类组件提供各类connect
- 提供streaming/function能力
- 根据数据schema灵活进行数据预处理
Kafka详解
2.1 架构
Producer:生产数据,写入Kafka存储系统中
Consumer:数据消费
Zookeeper:元数据存储
- 选举机制:Paxos
- 提供一致性:写入强一致性;读取会话一致性
- 提供可用性:一半以上节点存活即可续写
- 提供功能:watch机制;持久/临时节点能力
- Kafka存储数据:
- Broker Meta信息(临时节点)
- Controller信息(临时节点)
- Topic信息(持久节点)
- Config信息(持久节点)
Broker集群 由多个节点构成,topic的partition分配在brocker中;主节点负责写入,从节点负责备份
若干broker节点组成kafka集群
broker作为消息接收模块,使用react网络模型进行消息数据的接受
broker作为消息持久化模块
controller选举
- broker启动尝试去zk注册controller节点
- 注册上的就是controller,其余watch controller,异常则重新注册
- coordinator
- 负责topic-partition和consumer的负载均衡
- 根据不同场景提供不同的分配策略
- Dynamic Membership
- Static Membership
- Incremental Cooperative Rebalance
2.2 高可用
副本同步机制
提供lsr副本复制机制,提供热备功能
写入端提供ack=0, -1, 1机制,控制副本同步强弱
副本切换机制
提供clean/unclean副本选取机制
2.2.1 ISR机制
AR:assign replica 已经分配的所有副本
OSR:out sync replica 很久没有同步数据的副本
ISR:一直都在同步数据的副本;可以作为热备进行切换的副本;min.insync.replicas最少isr数量配置
Kafka集群缩容步骤
** 计算均衡的Replica分布拓扑**
- 保证Topic的partition 在broker间分布均匀
- 保证Broker之间Replica分布均匀
Controller负责新的副本分布元数据广播 Controller将新的leader/follower信息广播给broker
**Broker负责新副本的数据同步**
- Broker上有需要同步数据的副本则进行数据同步
**下线缩容的Broker节点**
- 数据同步完毕之后下线缩容的Broker节点
Kafka集群扩缩容问题
** 扩缩容时间长**
- 涉及到数据迁移,在生产环境中一次扩缩容可能要迁移TB甚至PB的数据
**扩缩容期间集群不稳定**
- 保证数据的完整性,往往会从最老的数据进行同步,这样会导致集群时刻处于从磁盘读取数据的状态,disk/net/cpu 负载都会比较高
** 扩缩容期间无法执行其他操作**
- 在一次扩缩容操作结束之前,无法进行其他运维操作(扩缩容)
Pulsar
架构
具体介绍
Pulsar Broker:
Pulsar Broker无状态组件,负责运行两个模块
1. Http服务器 暴露了restful接口,提供生产者和消费者topic 查找api
2. 调度分发器 异步的tcp服务器,通过自定义=进制协议进行数据传输
Pulsar Broker作为数据层代理
1. Bookie通讯 作为Ledger代理负责和Bookie进行通讯
2. 流量代理
- 消息写入Ledger存储到Bookie
- 消息缓存在堆外,负责快速响应
Pulsar Storage:
Pulsar数据存储Segment在不同存储中的抽象
定义好抽象之后,即可实现多介质存储
** 集群HA & scale up**
Topic<->bundle完成映射
bundle分配给broker
look up topic
look up result
TCP连接
** Pulsar vs Kafka**
- 存储架构
- pulsar存算分离
- 分层架构优势:流量代理数据存储解藕;流量代理无状态快速扩缩容;流量代理可以对接海量客户端;存储层负责数据存储,可以多级;
- 计算层:可以预处理数据;数据缓存;无状态扩缩容后能快速负载均衡
- 存储层:可以实现分层存储 扩缩容