写点什么

为什么要选择 Apache Pulsar(一)

  • 2017-11-26
  • 本文字数:2025 字

    阅读完需:约 7 分钟

Apache Pulsar 是由 Yahoo 开发并开源的下一代发布订阅消息系统。Pulsar 用于解决现有开源消息系统的不足,并已在 Yahoo 的生产环境中运行了三年多时间,助力 Yahoo 的主要应用,如 Yahoo Mail、Yahoo Finance、Yahoo Sports、Flickr、Gemini 广告平台和 Yahoo 的分布式键值存储系统 Sherpa。Pulsar 于 2016 年底开源,目前是 Apache 软件基金会的孵化器项目。在这篇文章里,我们将介绍 Pulsar 的一些主要特性。

上一篇文章中,我们介绍了Pulsar 的一些组件概念和术语。Pulsar 集群主要由三部分组成:broker 集群,bookie 集群,以及用于协调配置管理的ZooKeeper 集群。Pulsar broker 组件用于接收、保存和传递消息。bookie 是Apache BookKeeper 服务器,为Pulsar 提供持久性的存储,一直到消息被消费掉。架构图如下所示。

图1 Pulsar 集群架构图

灵活的消息模型

传统的消息模型有两种:队列模型发布 / 订阅模型。队列是一种点到点的通信模型——可能有多个消费者从服务器上读取消息,而每个消息只会被发给其中的一个消费者——因此,数据的处理可以被分摊给多个消费者,从而获得伸缩性。发布/ 订阅是一种广播式的通信模型——消息被广播给所有的消费者。

Pulsar 通过统一的 API 实现了这两种模型——生产者向主题 (topic) 发布消息,消息被广播给不同的订阅者,消费者订阅主题以便消费消息。消费者可以灵活地选择消费消息的方式——独享方式、共享方式或失效备援方式。对于队列模型来说,如果采用共享方式,并使用了轮询策略,那么应用程序就可以将负载分摊给消费者。与其他消息系统不同的是,Pulsar 允许活跃消费者的数量超过主题分区的数量。

因为 Pulsar 使用 BookKeeper 作为流式存储组件,所以它也对外提供了一组流式 Reader API 来读取底层的日志,应用程序可以调用这组 API 从任意位置开始消费消息。

灵活的部署模型

Pulsar 可以被灵活地部署到不同的环境里,它可以运行在裸机上、本地或云端的 Kubernetes 集群上、Google Container Engine 和 AWS 上。Pulsar 也可以作为单独节点运行,用于开发和测试。在这种情况下,Pulsar broker、bookie 和 ZooKeeper 都以独立进程的方式运行。

多租户

Pulsar 在一开始就被设计成可以在私有云和公有云上部署的托管服务,其他的开源消息系统都没有提供这种特性。对于大中型企业来说,共享一个 Pulsar 集群要比让每个团队都使用自己的集群成本低得多。虽然每个团队可以自己部署集群,但这要求他们对系统内部原理非常了解,知道如何配置、监控和诊断问题。另外,在整个组织内共享一个集群可以降低成本,因为集群资源可以得到更好的利用,只需要一个 DevOps 团队就足以应付所有的工作,而且可以根据负载高峰期和项目增长作出容量规划。

多地域复制

与其他消息系统不一样的是,Pulsar 将多地域复制作为首要特性。用户只需要配置好区域,并启用跨集群消息复制,剩下的事情由 Pulsar 来完成。数据会持续不断地被复制到远程的 Pulsar 集群上。如果数据中心之间发生网络故障,数据会被保存下来并进行重试,直到复制成功为止。

Pulsar 可以在不同地理区域的多个数据中心上进行并行的数据复制。Yahoo 的键值存储系统 Sherpa 使用 Pulsar 来复制预写式日志(WAL),日志被复制到十个不同的地理区域,实现最终一致性。多地域复制方式也很灵活,可以在私有云之间复制,也可以在私有云和公有云之间复制,或者在公有云之间复制,甚至在数据中心和私有云(或公有云)之间复制。对于想要迁移到云端的大型组织来说,他们可以将 Pulsar 部署到多个不同的云上,然后在多个云之间复制数据。

持久性

Pulsar 在收到消息并进行确认之后,它可以保证数据不会因为各种故障而丢失掉。持久性保证强度由保存数据的磁盘数量来决定,而磁盘数量则由配置的“9”的个数来决定。Pulsar 使用 bookie 来保证持久性,在收到一个消息之后,它将消息发送给多个 bookie 节点。bookie 节点在收到消息后,将它保存到内存里,同时也往 WAL 里写入一份。bookie 在向 broker 发送确认之前会将日志强制写入稳定的存储。与数据库的事务类似,WAL 可以保证数据不会丢失,即使机器出现故障。在重启机器后,通过重放 WAL 就可以恢复数据。

除此之外,即使有多个节点发生故障,消息仍然不会丢失。Pulsar 将每个消息复制给多个 bookie 节点,并在若干个 bookie(根据配置的复制系数)写入成功之后才会向生产者发送确认。这样可以保证在发生多个节点故障的情况下,仍然不会丢失数据。

得益于 BookKeeper 内部 IO 机制的优化,在保证强持久性的同时,Pulsar 仍然能够提供很高的吞吐量和很低的延迟。

总结

Pulsar 是下一代发布订阅消息系统,弥补了其他开源消息系统的不足。在这篇文章里,我们介绍了 Pulsar 仅通过一套 API 实现了灵活的消息模型——队列和发布订阅,还介绍了企业级的多租户特性、多地域复制和强持久性保证。在下一篇文章里,我们将介绍更多的特性,比如 IO 的读写隔离、伸缩性、安全和运维成熟度。

查看英文原文 Why Apache Pulsar? Part 1

感谢杜小芳对本文的审校。

2017-11-26 17:159656
用户头像

发布了 322 篇内容, 共 159.3 次阅读, 收获喜欢 148 次。

关注

评论 1 条评论

发布
用户头像
不错
2022-07-04 14:51
回复
没有更多了
发现更多内容

南宁等级测评机构有几家?分别是哪几家?

行云管家

等保 南京 等级保护 等级

百度APP iOS端内存优化-原理篇

百度Geek说

ios 内存 企业号 2 月 PK 榜

优秀实践案例征集火热开启,快来投稿!

Apache RocketMQ

消息列队

使用 NineData GUI 创建与修改 ClickHouse 表结构

NineData

MySQL 分布式数据库 Clickhouse Dbeaver NineData

给 Databend 添加 Aggregate 函数 | 函数开发系例二

Databend

直播预约|数据库掌门人论坛召开,共谋中国数据库生态发展新路径

镜舟科技

数据库 大数据 开源

云原生技术在容器方面的应用

统信软件

容器 云原生 云服务

MASA Stack 1.0 发布会讲稿 —— 产品篇

MASA技术团队

.net 云原生 MASA MASA Blazor

提升软件质量?为什么不试试华为云CodeArts Check

华为云开发者联盟

云计算 华为云 企业号 2 月 PK 榜 华为云开发者联盟

【等保小知识】过等保后可以收到哪些资料?

行云管家

等保 等级保护 过等保

Apifox 1 月更新 | 将接口调试做到「极简」的新模式上线

Apifox

Apifox API

GaussDB(DWS)现网案例:collation报错

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

OpenInfra峰会议程已公布,特色主题演讲,百余场专题会议等你来参与!

极客天地

从一个Demo说起Zookeeper服务端源码

宋小生

zookeeper

记录一次还算优雅的代码设计

京东科技开发者

线程 cpu 优雅 代码设计 企业号 2 月 PK 榜

VSCode一键接入Notebook体验算法套件快速完成水表读数

华为云开发者联盟

人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

【活动报名】re:Invent - AI 应用助力企业构建数字战略

亚马逊云科技 (Amazon Web Services)

物联网平台选型葵花宝典:盘点开源、SaaS及通用型平台的优劣对比

AIRIOT

物联网 物联网平台选型 平台选型

使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络

亚马逊云科技 (Amazon Web Services)

深度学习 量子计算

OpenHarmony 3.2 Beta多媒体系列——视频录制

OpenHarmony开发者

OpenHarmony

高级java体系课第1期第二周作业

刘博

统一观测丨如何使用Prometheus 实现性能压测指标可观测

阿里巴巴云原生

阿里云 云原生 Prometheus 压测

有了 ETL 数据神器 dbt,表数据秒变 NebulaGraph 中的图数据

NebulaGraph

数据库 大数据 数据处理 图数据库

什么是智能制造,为什么它对传统制造业影响如此之大?

PreMaint

智能工厂 智能制造

火山引擎DataLeap:3个关键步骤,复制字节跳动一站式数据治理经验

字节跳动数据平台

大数据 数据治理 数据研发 实际应用 企业号 2 月 PK 榜

基于 Kubernetes 的企业级大数据平台,EMR on ACK 技术初探

阿里巴巴云原生

阿里云 容器 云原生

直播预告丨 立即解锁 ALB Ingress 高级特性

阿里巴巴云原生

阿里云 容器

Apipost自动化测试功能概述

不想敲代码

自动化测试 测试自动化 apipost

新思科技解读2023年软件安全行业六大趋势

InfoQ_434670063458

新思科技 软件安全

聊一聊,我对DDD的关键理解

阿里技术

DDD

为什么要选择Apache Pulsar(一)_开源_Karthik Ramasamy_InfoQ精选文章