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

55 阅读4分钟

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


消息队列概述

消息队列应用情景

image.png

  • MQ消息通道
graph TD
异步解耦 --> 削峰填谷 --> 发布订阅 -->  高可用 --> 异步解耦
  • EventBridge 数据总线
    • 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集
    • 事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
    • 事件目标:消费事件消息。

image.png

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

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

image.png

主流消息队列相关介绍

image.png

Kafka详解

架构介绍

image.png

Kafka 高可用

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

Kafka 副本ISR机制

image.png

Kafka 写入ACK机制

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

Pulsar 详解

架构介绍

image.png

  • Pulsar Proxy
    • Pulsar Proxy的作用及应用场景
      • 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
      • Proxy提供类似GateWay代理能力,解耦客户端和 Broker,保障Broker安全
  • Pulsar Broker
    • Pulsar Broker无状态组件,负责运行两个模块
      • Http 服务器
        • 暴露了restful接口,提供生产者和消费者topic查找api
      • 调度分发器
        • 异步的tcp服务器,通过自定义二进制协议进行数据传输
    • Pulsar Broker作为数据层代理
      • Bookie通讯
        • 作为Ledger 代理负责和Bookie进行通讯
      • 流量代理
        • 消息写入Ledger存储到Bookie
        • 消息缓存在堆外,负责快速响应
  • Pulsar Storage
    • Pulsar数据存诸 Segment在不同存储中的抽象
      • 分布式Journal系统(Bookeeper)中为Journal/Ledger
      • 分布式文件系统(GFS/HDFS)中为文件
      • 普通磁盘中为文件
      • 分布式 Blob存储中为Blob
      • 分布式对象存储中为对象
    • 定义好抽象之后,即可实现多介质存储
  • Pulsar IO 连接器
    • Pulsar lO分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过Source 实现数据输入。输出代表数据要往哪里去,通过 Sink 实现数据输出
    • Pulsar提出了IO(也称为Pulsar Connector),用于解决Pulsar与周边系统的集成问题,帮助用户高效完成工作。
    • 目前Pulsar lO支持非常多的连接集成操作:例如HDFS、Spark、Flink、Flume、ES、HBase等
  • Pulsar Functions
    • Pulsar Functions是一个轻量级计算框架,提供一个部署简单、运维简单、API简单的FAAS 平台
    • Pulsar Functions提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充
    • 使用Pulsar Functions,用户可以轻松地部署和管理function,通过function 从 Pulsar topic读取数据或者生产新数据到Pulsar topic

Bookeeper

  • 整体架构

image.png

  • 基本概念
    • Ledger: BK的一个基本存储单元,BK Client的读写操作都是以Ledger为粒度的
    • Fragment: BK的最小分布单元(实际上也是物理上的最小存储单元),也是 Ledger 的组成单位,默认情况下一个Ledger 会对应的一个Fragment (一个Ledger也可能由多个Fragment组成)
    • Entry:每条日志都是一个 Entry,它代表一个record,每条record都会有一个对应的entry id
  • 读写分离
    • 写入优化:
      • 写入时,不但会写入到Journal中还会写入到缓存(memtable)中,定期会做刷盘(刷盘前会做排序,通过聚合+排序优化读取性能)
    • 读取优化:
      • 先读 Memtable,没命中再通过索引读磁盘
      • Ledger Device中会维护一个索引结构,存储在RocksDB中,它会将(Ledgerld,Entryld)映射到(EntryLogld,文件中的偏移量)

image.png

Pulsar 功能介绍

image.png

Pulsar VS Kafka

  • 存储架构
    • 存储计算分离之后带来的优劣势·多层架构,状态分离之后的优势·
  • 运维操作
    • 应对突发流量变化,集群扩缩容是否便捷
    • 运维任务是否影响可用性
    • 集群部署是否灵活
  • 功能特性
    • 多语言&多协议
    • 多租户管理
    • 生产消费模式
  • 生态集成

周边和生态

  • 概览

image.png