从 Kafka 到 Pulsar的数据流演进之路笔记(一)| 青训营笔记

79 阅读4分钟

从 Kafka 到 Pulsar的数据流演进之路笔记(一)| 青训营笔记

这是我参与「第四届青训营 -大数据场」笔记创作活动的第16天

一、消息队列概述

1. 消息队列应用场景

  • MQ 消息通道
  • EventBridge 事件总线
  • Data Platform 数据流平台
1.1 MQ 消息通道
  • 异步解耦(下游无需关注上游)
  • 削峰填谷(MQ带缓存)
  • 发布订阅(下游订阅即可消费)
  • 高可用(各模块可用性独立)

image.png

1.2 EventBridge 事件总线
  • 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集
  • 事件集:存储所接收的事件消息,根据事件规则将事件消息路由到事件目标
  • 事件目标:消费事件消息

image.png

1.3 Data Platform 数据流平台
  • 提供批/流数据处理能力
  • 各类组件提供连接接口
  • 提供 Streaming/Function 能力
  • 根据数据 schema 灵活的进行数据预处理

image.png

2. 常见消息队列

image.png

二、Kafka 详解

1. Kafka 架构介绍

image.png

1.1 ZooKeeper
  • 元数据存储

  • 提供一致性(写入和读取)和可用性(一半以上节点存活即可读写)

  • 提供功能:

    • watch观察节点状态
    • 持久/临时节点能力

image.png

1.2 Broker
  • 若干个Broker节点组成Kafka节点,主节点负责数据写入,副节点负责数据备份
  • 作为消息的接收模块:使用React网络模型进行消息数据的接收
  • 作为消息的持久化模块,进行消息的副本复制以及持久化
  • 作为高可用模块,通过副本间的Failover进行高可用保证

image.png

1.3 Controller
1.3.1 选举
  • Broker启动会尝试去水中注册controller节点
  • 注册上controller节点的 broker即为controller
  • 其余 broker 会 watch controller节点,节点出现异常则进行重新注册

image.png

1.3.2 作用
  • Broker重启/宕机时,负责副本的Failover切换
  • Topic 创建/删除时,负责Topic meta 信息广播
  • 集群扩缩容时,进行状态控制
  • Partition/Replica状态机维护

image.png

1.4 Coordinator
  • 负责topic-partition <-> consumer的负载均衡

  • 根据不同的场景提供不同的分配策略

    • Dynamic Membership Protocol
    • Static Membership Protocol
    • Incremental Cooperative Rebalance

image.png

2. Kafka 高可用

副本同步机制

  • 提供lsr副本复制机制,提供热备机制
  • 写入ack机制;1:leader写入成功就成功;0:produver发送后即成功;-1:所有副本都成功

副本切换机制

  • 提供clean/unclean副本选举机制

    • clean:优先选取isr中的副本作为leader;无可用,partition不可用(更注重数据一致性)
    • unclean:优选选取isr中的副本作为leader,无可用选择其他存活副本(不能保证一致性,保证可用性)

3. Kafka 集群扩缩容

  • Topic维度

    • partition在各个broker之间的分布是均匀的
    • 同一个partition的replica不会分布在一台broker上
  • Broker维度

    • Broker之间的replica的数量是均匀的
3.1 Kafka 集群缩容步骤
  • 扩容Broker节点

    • Leader 副本写入成功,Producer即认为写成功
  • 计算均衡的Replica分布拓扑

    • 保证Topic的partition在broker间分布均匀
    • 保证Broker 之间Replica分布均匀
  • Controller负责新的副本分布元数据广播

    • Controller将新的leader/follower信息广播给broker
  • Broker负责新副本的数据同步

    • Broker上有需要同步数据的副本则进行数据同步
  • 计算均衡的Replica分布拓扑

    • 保证Topic的partition在 broker间分布均匀
    • 保证Broker之间Replica分布均匀
  • Controller负责新的副本分布元数据广播

    • Controller将新的leader/follower信息广播给broker
  • Broker负责新副本的数据同步

    • Broker上有需要同步数据的副本则进行数据同步
  • 下线缩容的 Broker节点

    • 数据同步完毕之后下线缩容的 Broker节点
3.2 Kafka 扩集群缩容问题
  • 扩缩容时间长

    • 涉及到数据迁移,在生产环境中一次扩缩容可能要迁移TB甚至PB的数据
  • 扩缩容期间集群不稳定

    • 保证数据的完整性,往往会从最老的数据进行同步,这样会导致集群时刻处于从磁盘读取数据的状态,disk/netIcpu负载都会比较高
  • 扩缩容期间无法执行其他操作

    • 在一次扩缩容操作结束之前,无法进行其他运维操作(扩缩容)

4. Kafka 未来演进之路

  • 去除zookeeper依赖
  • 存储计算分离演进
  • 使用KRaft作为元数据和数据存储介质

5. Kafka 运维/调优经验介绍

单机吞吐,参数配置,指标可视化,扩缩容优化