[Recap] Huobi & GitChat Meetup

转载自 StreamNative 微信公众号 [Recap] Huobi & GitChat Meetup

内容导读 :Apache Pulsar 于 2016 年由雅虎开源,并于 2018 年成为 Apache 顶级项目。 Apache Pulsar 是云原生新一代的消息流数据平台,它具有统一的消息消费模型、存储计算分离的架构、高可用和高可扩展性、以及多租户等丰富的企业级特性。本篇介绍 Pulsar 的特性及其背后的系统架构。


2019 年 6 月 1 日,Huobi 和 Gitchat 在北京举办主题为“分布式高可用消息队列的原理与实践”的 meetup。我司 CTO 翟佳受邀参加本次分享,发表“Apache Pulsar 特性及其系统架构”主题演讲。本篇为演讲内容导航,干货满满,欢迎查看!

[Recap] Huobi & GitChat Meetup_第1张图片
翟佳 | Apache Pulsar、BookKeeper Committer 和 PMC

Pulsar 简介

Apache Pulsar 是灵活的发布-订阅消息系统(Flexible Pub/Sub messaging),采用分层分片架构(backed by durable log/stream storage)。

问:消息系统有很多,Yahoo 为什么研发自己的消息系统呢?

用户需求

已有的消息系统无法解决 Yahoo 遇到的问题和规模,Yahoo 需要多租户,能够支撑上百万的 topics,同时满足低延迟、持久化和跨地域复制要求。

存在问题

  • 分区模型紧耦合存储和计算,不是云原生(Cloud Native)的设计。

  • 存储模型过于简单,对文件系统依赖太强。

  • IO 不隔离,消费者在清除 Backlog 时会影响其他生产者和消费者。

  • 运维复杂,替换机器、服务扩容需重新均衡数据。

解决方法

为解决上述问题,Pulsar 应运而生,Pulsar 的特性如下:

  • 持久化:采用 BookKeeper 作为存储层,灵活性强。

  • Ordering:每个消息有全局唯一的 ID,消息重发简单。

  • Delivery Guarantees:At least once, at most once 和 effectively once。

  • 高吞吐:单个分区高达 1.8 M 消息/秒。

  • 低延迟:99% 的生产延迟小于 5 ms。

  • 统一消息模型:同时支持两种消费模型,流和队列。

  • 多租户:单个群集可支持多租户和用例。

  • 跨地域复制:原生可用。

  • 高可用、高扩展性、易运维

Pulsar 的差异化亮点

统一的消费模型

Pulsar 的独特之处在于,在 partition 和 consumer 中间添加了订阅模型,订阅模型有 exclusive、failover、shared 模式。通过 shared 模式,producer 端和 consumer 端相互解耦,producer 并发高,增加 partition 的数量;consumer 消费慢,增加 consumer 的数量,互不影响,可实现真正意义上的解耦。

下图介绍了 Pulsar 如何管理订阅(视频回放 3:28:15)。在 Pulsar Broker端,有一个数据结构 Cursor 来持久保存每一条消息的消费状态。

[Recap] Huobi & GitChat Meetup_第2张图片

在 Pulsar 2.4.0 版本中,增加了 Key-Shared 订阅模式(视频回放 3:31:30),既能保证一个 partition 的并发度,同时 consumer 能保证每个 key 的单独顺序。

企业级特性

企业要维护大的集群,多租户特性显示得尤为重要。Pulsar 的多租户特性能满足企业的管理需求,可提供隔离、共享、和丰富策略来管理 topic。

每个租户下面有 namespace,namespace 下又有一个或多个 topic。租户层通过角色控制实现消息的共享和隔离。namespace 层提供了丰富的策略,可对 topic 进行管理。例如,你可以在 namespace 中设置管理策略,如消息副本数、backlog 超过阈值后如何处理等等。

应用 namespace 管理,可应用 Pulsar 的跨地域复制(视频回放 3:36:20),实现异地互备,在创建时添加一个参数指定一个 topic 在几个机房之间做互备即可。Pulsar Geo-replication 的优点如下:

  • Broker 原生,方便易用

  • Pub-Sub 一体

  • 管理简单

  • 配置灵活

部分内容在 EventStreaming Meetup 中有详细介绍,请参阅 [Recap of EventStreaming Meetup No.1]。

分层分片的架构

分层

分层指存储和计算的分离。在 server 端,每个 broker 作为存储层的一个 client,将 topic 数据存储到底层存储层 bookie 中。该架构的特点和优势是:

  • broker 节点不存储任何数据,如果宕机,topic 可很快迁移到其他 topic。

  • broker 节点对等,底层存储节点也提供了对等架构。易于负载平衡和扩容,管理容易,数据可用性强。

分片

Pulsar 给用户提供了 partition 的逻辑抽象,底层物理存储将逻辑的 partition 划分为多个分片,均匀存储在所有节点上。该结构的好处在于存储容量不再受限于单个存储节点容量,扩容无需进行数据搬移,数据分布均匀。

Pulsar 的分层分片架构

  • 存储层概念:Entry、Ledger 和 Log

    Log/Stream/topic 暴露给用户,在此之下每个 topic 拆分成不同分片,在 BookKeeper 中称为 ledger,一个 ledger 写完就被关闭。最下层每个 entry 对应 Pulsar 中的 messge。

  • 存储层:Apache BookKeeper

    Pulsar 使用 BookKeeper 作为存储层。BookKeeper 提供的是WAL(Write Ahead Log)的抽象。解决的问题是把受限于单个节点的 binlog 分散到集群中,并提供高带宽和低延迟。支持读和写的高可用,节点宕机后,新节点换入,不会影响用户应用。

优点:便捷运维+无感知容错

无感知容错,零数据 Catch up,运维便捷。对存储层来说,分层分片架构和底层并发架构让数据恢复简单,应用无感知,且控制灵活。

存储扩容方便。存储容量不再受限于单个存储节点容量,扩容无需数据搬移,数据分布均匀。

分区 vs 分片

  • Kafka:前两个节点已经满了,新加节点需要数据搬移和平衡,不能立即用。
  • Pulsar:不同于 Kafka 物理和逻辑的绑定性,存储是平均分配的,每个 topic 分成小块,分布更均匀。加入新的节点后,可以立即使用。
  • 下面这张图形象直观地看到 Pulsar 和 Kafka 的不同。


    [Recap] Huobi & GitChat Meetup_第3张图片

优点:IO 的并发和隔离

常见模式分为写(Write)、读最新数据(Tailing Read)、读老数据(Catchup Read)三种。 Kafka 把读写集中在单一节点上,而 Pulsar 的读写隔离更能保证读写质量。

最新数据可应用 pub-sub 接口读取,老数据应用 segment readers 接口并发地读取底层数据。得益于分层分片架构,Pulsar 可将老数据分片搬移至二级存储。这样最新的数据在 broker 中有缓存,比较新的数据放在 BookKeeper 中,更老的数据放在其他存储,比如 S3 上。

Pulsar 的生态和社区

Pulsar 在 Messaging 和 Stream Storge 的基础上,上层提供 Pulsar IO - Connector 接口。在 Messaging 层提供 Pulsar Functions。在 Stream storage 层主要做二级存储,且提供用户直接访问接口,提供 Pulsar SQL、Hive 的集成。

演讲结束后,翟佳还与嘉宾进行互动,交流了相关问题。

演讲 PPT,参阅 https://www.slidestalk.com/s/ApachePulsar64933。

视频回顾,参阅视频回放(3:13:00 开始)http://www.itdks.com/index.php/Act/apply_upgrade/id/2934/mUid/0/tpl/tpltwo.html#dingbu。


Apache Pulsar 社区

  • Twitter: @apache_pulsar
  • 微信公众号: ApachePulsar
  • 邮件列表:
    [email protected]
    [email protected]
  • Slack:
    登陆: https://apache-pulsar.slack.com (#china)
    注册: https://apache-pulsar.herokuapp.com/
  • 翻译: https://crowdin.com/project/apache-pulsar
  • Github:
    https://github.com/apache/pulsar
    https://github.com/apache/bookkeeper

更多关于 Pulsar 干货和动态分享,请关注 StreamNative 和 ApachePulsar 公众号!

[Recap] Huobi & GitChat Meetup_第4张图片
[Recap] Huobi & GitChat Meetup_第5张图片

你可能感兴趣的:([Recap] Huobi & GitChat Meetup)