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

161 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

1. 消息队列概述

1.1. 消息队列的应用场景

image.png

1.1.1. MQ 消息通道

image.png

1.1.2. EventBridge 数据总线

事件源

  • 将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集

事件集

  • 存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标

事件目标

  • 消费事件消息

image.png

1.1.3. Data Platform 数据流平台

  1. 提供 流/批 数据处理能力
  2. 各类组件提供各类Connect
  3. 提供Streaming/Function 能力
  4. 根据数据schema灵活的进行数据预处理

image.png

1.2. 主流消息队列的相关介绍

image.png

2. Kafka 详解

2.1. Kafka 架构介绍

image.png

2.1.1. Zookeeper

  • 选举机制:Paxos 机制
  • 提供一致性:写入读取
  • 提供可靠性:一半以上节点存活即可读写
  • 提供功能:watch机制,持久/临时节点能力

Kafka 存储数据:

  1. Broker Meta 信息(临时节点)
  2. Controller 信息(临时节点)
  3. Topic 信息(持久节点)
  4. Config 信息(持久节点)

image.png

2.1.2. Broker

Broker 角色:

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

image.png

2.1.3.2. Controller 选举

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

image.png

2.1.3.2. Controller 作用

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

image.png

2.1.4. Coordinator

  • 负责topic-partition <-> consumer 的负载均衡
  • 根据不同的场景提供不同的分配策略
    • Dynamic Membership Protocol
    • Static Membership protocol
    • Incremental Cooperative Rebalance

image.png

2.2. Kafka 高可用

  • 副本同步机制
    • 提供lsr副本复制机制,提供热备功能
    • 写入端提供ack=0,-1,1机制,控制副本同步强弱
  • 副本切换机制
    • 提供clean/unclean副本选举机制

image.png

2.2.1. Kafka副本ISR机制

image.png

2.2.2. Kafka写入Ack机制

  • Ack = 1
    • Leader副本写入成功,Producer即认为写成功
  • Ack = 0
    • OneWay模式
    • Producer发送后即为成功
  • Ack = -1
    • ISR中所有副本都成功,Producer才认为写成功

2.2.3. Kafka 副本同步

image.png

2.2.3. Kafka 副本选举

image.png

3.1.1. Kafka 集群扩缩容

image.png

3.1.2. Kafka 集群扩容步骤

image.png

3.1.2. Kafka 集群缩容步骤

image.png

3.1.2. Kafka 集群扩缩容问题

image.png

4.1. Kafka 未来演进之路

image.png

4.1.1. Kafka 去除 zookeeper依赖

image.png

4.1.2. Kafka依赖KRaft

image.png

image.png

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

image.png

5.1.1. Kafka 单机吞吐

image.png

5.1.2. Kafka 集群参数配置

image.png

5.1.3. 扩缩容优化

image.png

3. Pulsar 详解

3.1. Pulsar 架构介绍

image.png

3.1.1. Pulsar Proxy

  • Pulasar 客户端连接集群的两种方式
    • Pulsar Client -> Broker
    • Pulsar Client -> Proxy
  • Pulsar Proxy
    • 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
    • Proxy提供类似GateWay代理能力,解耦客户端和Broker,保障Broker安全

image.png

3.1.2. Pulsar Broker

image.png

3.1.3. Pulsar Storage

image.png

image.png

3.1.4. Pulsar IO 连接器

image.png

3.1.5. Pulsar Functions(轻量级计算框架)

image.png

3.2.1. Bookeeper 整体架构

image.png

3.2.2. Bookkeeper 基本概念

image.png

3.2.3.1. Bookkeeper 新建Ledger

image.png

3.2.3.2. Bookkeeper Ledger 分布

image.png

3.2.4.2. Bookkeeper 写一致性

image.png

3.2.4.3. Bookkeeper 读一致性

image.png

3.2.4.1. Bookkeeper 读写分离

image.png

3.2.5. Bookkeeper with pulsar

image.png

3.3. Pulsar功能介绍

image.png

3.3.1. Pulsar 生产模式

image.png

3.3.2. Pulsar 消费模式

image.png

3.3.2.1. Exclusive 消费模式

  • 独占订阅(Stream流模型)
    • 独占订阅中,在任何时间,一个消费者组(订阅)中有且只有一个消费者来消费Topic中的消息

image.png

3.3.2.2. Failover 消费模式

  • 故障切换(Stream流模型)
    • 使用故障切换订阅,多个消费者可以附加到同一订阅。但是,一个订阅中的所有消费者,只会有一个消费者被选为该订阅的主消费者。其他消费者将被指定为故障转移消费者。

image.png

3.3.2.3. Shared 消费模式

  • 共享订阅(Queue队列模型)
    • 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以循环分发的形式发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者

image.png

3.3.2.4. Key_Shared 消费模式

  • 按Key共享订阅(Queue队列模型)
    • 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以key-hash发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者

image.png

3.3.3. Pulsar 多租户

image.png

3.3.4. Pulsar Plugin

image.png

3.3.5. Pulsar GEO Relication

image.png

3.4.1. Pulsar HA & Scale-up

image.png

3.4.2. Pulsar HA & Scale-up

image.png

3.5. Pulsar vs Kafka

image.png

3.5.1. 存储计算分离

image.png

4. 周边和生态

4.1. 周边生态概览

image.png

4.1.1. Pulsar IO

image.png

4.1.2. Kafka Schema

image.png

4.1.3. Pulsar SQL

image.png