数据流演进之路 | 青训营笔记

64 阅读4分钟

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

消息队列概述

消息队列应用场景

  • MQ 消息通道:异步解耦、削峰填谷、高可用、发布订阅 index.png

  • EventBridge 事件总线:事件源、事件集、事件目标

index.jpg

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

index.png

主流消息队列介绍

  • RabbitMQ
  • RocketMQ
  • Kafka
  • Pulsar

image.png

Kafka

Kafka架构

index.png

  • Zookeeper 提供—致性、可用性,提供watch机制、持久/临时节点能力。 index.png
  • Broker& Controller (特殊的Broker)

index-1.png

  • Coordinator

index.png

Kafka高可用

副本同步机制

  • 提供lsr副本复制机制,提供热备功能
  • 写入端提供ack=0,-1,1机制,控制副本同步强弱

副本切换机制

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

Kafka副本 ISR 机制

index.png

  • AR - Assign Replica,已经分配的所有副本

  • OSR - Out Sync Replica,很久没有同步数据的副本

  • ISR 一直都在同步数据的副本, 可以作为热备进行切换的副本,min.insync.replicas最少isr数量配置

Kafka写入 Ack 机制

  • Ack = 1: Leader 副本写入成功,Producer 即认为写成功

  • Ack = 0: OneWay 模式,Producer 发送后即为成功

  • Ack = -1:ISR中所有副本都成功,Producer 才认为写成功

Kafka集群扩缩容

index.png Kafka集群扩缩容之后的目标

  • Topic维度:partition 在各个broker 之间分布是均匀的 流量。每个broker网卡出入流磁盘均衡;同一个partition 的replica 不会分布在一台broker
  • Broker 维度:Broker之间replica的数量是均匀的。

Kafka集群扩容步骤

  • 扩容Broker节点: Leader副本写入成功,Producer即成功

  • 计算均衡的Replica分布拓扑:保证Topic的partition在 broker间分布均匀;保证 Broker 之间Replica分布均匀

  • Controller负责新的副本分布元数据广播: Controller将新的leader/follower 信息广播给broker.

  • Broker负责新副本的数据同步:Broker上有需要同步数据的副本则进行数据同步

Kafka集群缩容步骤

  • 计算均衡的Replica分布拓扑:保证Topic的partition在 broker间分布均匀;保证 Broker之间Replica分布均匀

  • Controller负责新的副本分布元数据广播: Controller将新的leaderlfollower信息广播给broker

  • Broker负责新副本的数据同步:Broker上有需要同步数据的副本则进行数据同步

  • 下线缩容的Broker节点: 数据同步完毕之后下线缩容的Broker节点

Kafka 演进之路

依赖ZooKeeper存在的问题

  • 元数据存取困难

  • 元数据更新网络开销大

  • 强耦合违背软件设计原则

  • 网络分区复杂度高

  • 并发访问ZooKeeper问题多

Kafka运维/调优经验介绍

  • 单机吞吐

  • 参数配置

  • 指标可视化

  • 扩缩容优化

Pulsar

Pulsar架构介绍

index.jpg

  • Pulsar Proxy
  • Pulsar Broker
  • Pulsar Storage
  • Pulsar lO
  • Pulsar Functions

bookkeepr介绍

index.jpg

基本概念

  • Ledger: BK的一个基本存储单元,BK Client的读写操作都是以Ledger为粒度的。

  • Fragment: BK的最小分布单元(实际上也是物理上的最小存储单元),也是Ledger的组成单位,默认情况下一个Ledger会对应的一个 Fragment (一个 Ledger也可能由多个Fragment组成)。

  • Entry: 每条日志都是一个 Entry,它代表一个record,每条record都会有一个对应的entry id。

Pulsar 功能特性

生产模式

image.png

消费模式

index.jpg

多租户

index.png

Pulsar vs Kafka

存储架构

  • 存储计算分离之后带来的优劣势
  • 多层架构,状态分离之后的优势

运维操作

  • 应对突发流量变化,集群扩缩容是否便捷
  • 运维任务是否影响可用性
  • 集群部署是否灵活

功能特性

  • 多语言&多协议
  • 多租户管理
  • 生产消费模式

分层架构优势

  • 流量代理层和数据存储层解耦
  • 流量代理层无状态,可快速扩缩容
  • 流量代理层可以对接海量的客户端连接
  • 存储层负责数据存储,可以使用多级存储

存储层

  • 按照数据冷热进行存储介质区分,降低成本·历史数据可海量保存,数据无价
  • 可直接通过存储层接口读取数据,批式计算

计算层

  • 对于写入的数据,可以做预处理,简单ETL
  • 可以做数据缓存,应对高扇出度场景
  • 无状态,扩缩容之后,能快速完成负载均衡Balance

总结

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。pulsar相对kafka而言,优势在于broker无状态支持更低成本扩容,无须重新分配现有数据。 同时提供分层存储,支持多租户。地域复制更加友好,基于仲裁的算法能保障集群是一致的。