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

85 阅读5分钟

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


消息队列概述

消息队列的应用场景

MQ消息通道

image.png


EventBridge事件总线

image.png

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

Data Platform流数据平台

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

「自我思考」消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。


主流消息队列的相关介绍

image.png


Kafka

「简介」Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。

Kafka架构介绍

image.png

👇讲解架构中的组件

Zookeeper

  1. 选举机制: Paxos机制
  2. 提供一致性:
  • 写入(强一致性)
  • 读取(会话一致性)
  1. 提供可用性:一半以上节点存活即可读写
  2. 提供功能:
  • watch机制
  • 持久/临时节点能力

Broker

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

Controller选举

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

Controller作用

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

Coordinator介绍

  • 负责topic partition <-> consumer的负载均衡
  • 根据不同的场景提供不同的分配策略

Kafka高可用

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

Kafka集群扩缩容之后的目标

  1. Topic维度
  • partition在各个broker之间分布是均匀的
  • 同一个partition的replica不会分布在一台broker
  1. Broker维度
  • Broker之间replica的数量是均匀的

自我思考

  • Kafka像其他Mq一样,也有自己的基础架构,主要存在生产者Producer、Kafka集群Broker、消费者Consumer、注册消息Zookeeper
  • Kafka中消息是以topic进行分类的,Producer生产消息,Consumer消费消息,都是面向topic的。

Pulsar

「简介」Pulsar 是一个企业级的分布式消息系统,最初由 Yahoo 开发,在 2016 年开源,并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多,主要服务于Mail、Finance、Sports、 Flickr、the Gemini Ads platform、 Sherpa (Yahoo 的 KV 存储)。

Pulsar架构介绍

image.png


👇讲解架构中的组件 Pulsar Proxy的作用及应用场景

  • 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
  • Proxy提供类似GateWay代理能力,解耦客户端和Broker,保障Broker安全

Pulsar Broker

无状态组件,负责运行两个模块

  1. Http服务器
  • 暴露了restful接口,提供生产者和消费者topic查找api
  1. 调度分发器
  • 异步的tcp服务器,通过自定义二进制协议进行数据传输

Pulsar数据存储Segment在不同存储中的抽象

  • 分布式Jourmal系统(Bookeeper)中为Journal/L edger
  • 分布式文件系统(GFS/HDFS)中为文件
  • 普通磁盘中为文件
  • 分布式Blob存储中为Blob
  • 分布式对象存储中为对象

Pulsar Storage

image.png


Bookkeeper基本概念

  • Ledger: BK的一个基本存储单元,BK Client的读写操作都是以Ledger为粒度的
  • Fragment: BK的最小分布单元(实际上也是物理上的最小存储单元),也是Ledger的组成单位,默认情况下一个Ledger会对应的一个Fragment (一 个Ledger也可能由多个Fragment组成)
  • Entry:每条日志都是一个Entry,它代表一个record,每条record都会有一个对应的 entry id

Pulsar生产模式

image.png


Pulsar消费模式

image.png

Pulsar VS Kafka

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

自我思考Pulsar对比Kafka优点

  1. 流式处理和队列的合体
  2. 支持分区,但不是必需的
  3. 日志固然不错,但 ledger 更胜一筹
  4. 无状态
  5. 简单的跨域复制
  6. 稳定的表现