这是我参与「第四届青训营 」笔记创作活动的第2天
消息队列概述
消息队列应用情景
- MQ消息通道
graph TD
异步解耦 --> 削峰填谷 --> 发布订阅 --> 高可用 --> 异步解耦
- EventBridge 数据总线
- 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集
- 事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
- 事件目标:消费事件消息。
事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集 事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。 事件目标:消费事件消息。
- Data Platform 数据流平台
- 提供批/流数据处理能力
- 各类组件提供各类Connect
- 提供Streaming/Function能力
- 根据数据schema灵活的进行数据预处理
主流消息队列相关介绍
Kafka详解
架构介绍
Kafka 高可用
- Kafka高可用
- 副本同步机制
- 提供lsr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步强弱
- 副本切换机制
- 提供clean/unclean副本选举机制
- 副本同步机制
Kafka 副本ISR机制
Kafka 写入ACK机制
- Ack = 1
- Leader副本写入成功,Producer 即认为写成功
- Ack = 0
- OneWay模式
- Producer 发送后即为成功
- Ack = -1
- ISR中所有副本都成功,Producer才认为写成功
Pulsar 详解
架构介绍
- Pulsar Proxy
- Pulsar Proxy的作用及应用场景
- 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
- Proxy提供类似GateWay代理能力,解耦客户端和 Broker,保障Broker安全
- Pulsar Proxy的作用及应用场景
- Pulsar Broker
- Pulsar Broker无状态组件,负责运行两个模块
- Http 服务器
- 暴露了restful接口,提供生产者和消费者topic查找api
- 调度分发器
- 异步的tcp服务器,通过自定义二进制协议进行数据传输
- Http 服务器
- Pulsar Broker作为数据层代理
- Bookie通讯
- 作为Ledger 代理负责和Bookie进行通讯
- 流量代理
- 消息写入Ledger存储到Bookie
- 消息缓存在堆外,负责快速响应
- Bookie通讯
- Pulsar Broker无状态组件,负责运行两个模块
- Pulsar Storage
- Pulsar数据存诸 Segment在不同存储中的抽象
- 分布式Journal系统(Bookeeper)中为Journal/Ledger
- 分布式文件系统(GFS/HDFS)中为文件
- 普通磁盘中为文件
- 分布式 Blob存储中为Blob
- 分布式对象存储中为对象
- 定义好抽象之后,即可实现多介质存储
- Pulsar数据存诸 Segment在不同存储中的抽象
- 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
- 整体架构
- 基本概念
- 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,文件中的偏移量)
- 写入优化:
Pulsar 功能介绍
Pulsar VS Kafka
- 存储架构
- 存储计算分离之后带来的优劣势·多层架构,状态分离之后的优势·
- 运维操作
- 应对突发流量变化,集群扩缩容是否便捷
- 运维任务是否影响可用性
- 集群部署是否灵活
- 功能特性
- 多语言&多协议
- 多租户管理
- 生产消费模式
- 生态集成
周边和生态
- 概览