从 Kafka 到 Pulsar:数据流演进之路 | 青训营笔记

112 阅读4分钟

这是我参与「第四届青训营」笔记创作活动的第3天,学习内容为《从Kafka到Pulsar:数据流演讲之路》

课程概述

  • 介绍了消息队列的内容
  • 介绍了Kafka的背景、实现、应用
  • 介绍了Pulsar的实现和应用

详细介绍

消息队列概述

1.1 消息队列的应用场景

  • MQ信息通道

    1. 异步解藕:下游无需关注上游
    2. 削峰填谷:数据可以储存
    3. 发布订阅
    4. 高可用:解藕小模块,各模块独立可用
  • EventBridge事件总线

    1. 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的时间信息发布到事件集
    2. 事件集:存储接受的事件信息,并根据事件规则将事件信息路由到事件目标
    3. 事件目标
  • DataPlatform流数据平台

    1. 提供批/流数据处理能力
    2. 各类组件提供各类connect
    3. 提供streaming/function能力
    4. 根据数据schema灵活进行数据预处理

image.png

Kafka详解

2.1 架构

image.png

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, -11机制,控制副本同步强弱
  副本切换机制
       提供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

架构

image.png

具体介绍

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存算分离
-   分层架构优势:流量代理数据存储解藕;流量代理无状态快速扩缩容;流量代理可以对接海量客户端;存储层负责数据存储,可以多级;
-   计算层:可以预处理数据;数据缓存;无状态扩缩容后能快速负载均衡
-   存储层:可以实现分层存储 扩缩容