博文推荐|Apache Pulsar 轻装上阵:迈向轻 ZooKeeper 时代

2023-10-13 14:59

本文主要是介绍博文推荐|Apache Pulsar 轻装上阵:迈向轻 ZooKeeper 时代,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文翻译自《Pulsar Isolation Part III: Separate Pulsar Clusters Sharing a Single BookKeeper Cluster》,原文链接:https://streamnative.io/blog/release/2022-01-25-moving-toward-a-zookeeperless-apache-pulsar/。作者 David Kjerrumgaard,Apache Pulsar Committer,StreamNative 布道师。

译者简介

李文奇,就职于微软 STCA,业余时间喜欢研究各类中间件技术及分布式系统。

首次!无 ZooKeeper 也能运行 Pulsar

Apache Pulsar™ 有时被视为一个较复杂的系统,有一部分原因是因为 Pulsar 使用了 Apache ZooKeeper™ 存储元数据。从设计之初,Plusar 就使用 ZooKeeper 存储分配给 topic 的 broker 信息、topic 的安全和数据留存策略等关键元数据信息。ZooKeeper 这个额外组件便加深了大家对于 Pulsar 是一个复杂系统的印象。

为了简化 Pulsar 的部署,社区发起了一项计划——Pulsar 改进规划 PIP-45[1] 来减轻对 ZooKeeper 的依赖,同时用可插拔的框架来替代。这种可插拔的框架支持用户按照实际的部署环境选择可替换的元数据及协调系统,从而减少了 Pulsar 在基础设施层面的必须依赖。

PIP- 45 的实现与未来计划

PIP-45 的代码已经被提交到了主分支上,并即将于 Pulsar 2.10 版本发布。Apache Pulsar 用户首次可以在没有 ZooKeeper 的情况下运行 Pulsar。

与 Apache Kafka 的 ZooKeeper 替换策略不同,PIP-45 的目的不是内部化 Apache Pulsar 平台本身的分布式协调功能。相反,它允许用户根据自身环境选用合适的技术组件来替换 ZooKeeper。

在非生产环境中,现在用户可以选择使用轻量级的替代方案,可将元数据保留在内存中或者本地磁盘上。开发人员便可收回之前在其笔记本上运行 Apache ZooKeeper 所需的计算资源。

在生产环境中,Pulsar 的可插拔框架支持用户利用那些早已在自身软件技术栈中运行的组件作为 ZooKeeper 的替代方案。

可以想象,如此重大的计划由多个步骤组成,目前其中一些已经实现。本文将带您浏览迄今为止已实现的步骤(步骤 1-4),并概述仍需要完成的工作(步骤 5-6)。请注意,本文中讨论的功能尚处于测试阶段,在实际发布版本中可能会有所变化。

第一步:定义元数据存储 API

PIP-45 为元数据管理和分布式协调提供了一个跨技术组件的接口,从而允许使用非 ZooKeeper 的方式管理元数据等,增加了系统的灵活性。

ZooKeeper 客户端 API 历来贯穿整个 Apache Pulsar 代码库,因此我们首先需要通过单个通用的 MetadataStore 接口来整合所有这些 API 调用。该接口的构造是基于 Pulsar 在与元数据间交互的需求以及一些由现有的元数据储存引擎(如 ZooKeeper 及 etcd)提供的场景语义。

af44468be1e9bea866a030bf5dae82b1.png

图 1:支持开发不同的 MetadataStore 接口实现方式,从而用接口来代替对 Apache ZooKeeper 的直接依赖,并提供了用户根据自身环境选用的灵活性。

这一步不仅将 Pulsar 与 ZooKeeper API 进行了解耦,同时也构建了一种可插拔框架,这样不同的接口实现便能在开发环境中互相替换。

这些新接口允许 Pulsar 用户根据 broker 配置文件中的 metadataURL 属性值轻松地将 Apache ZooKeeper 替换为其他元数据管理系统或其他协调服务。这套框架会根据 URL 的前缀自动产生正确的实例。例如,如果 metadataURL 配置属性值以Rocksdb:// 开头,则将使用 RocksDB 作为接口的实现。

第二步:创建基于 ZooKeeper 的实现

一旦定义了这些接口,会创建一个基于 Apache ZooKeeper 的默认实现,以便为现有的 Pulsar 平稳过渡到新的可插拔框架。

这一阶段我们的主要目标是对于那些想保留 Apache ZooKeeper 的用户,防止因 Pulsar 升级到新版本而产生任何重大的变更。因此,我们需要确保当前存储在 ZooKeeper 中的现有元数据在升级后也可以保存在与以前相同的位置和相同的格式中。

基于 ZooKeeper 的实现允许用户继续选择使用 ZooKeeper 作为元数据存储层,并且在 etcd 版本完成以前,这是目前唯一在生产环境中可用的实现方式。

第三步:创建基于 RocksDB 的实现

在解决了这些向后兼容问题之后,下一步是提供不基于 ZooKeeper 的实现方式,以展示框架的可插拔性。验证该框架的最简单方式是在单机模式(standalone 模式)下基于 RocksDB 实现 MetaDataStore。

这不仅证明该框架具有在不同 MetaDataStore 实现方式切换的能力,同时也能大大减少完整运行完全独立的 Pulsar 集群所需的资源总量。该步骤的实现对选择在本地(通常是 Docker 容器)进行开发和测试的开发者们有直接的影响。

第四步:创建基于内存的实现

缩减元数据存储也对单元与集成测试大有裨益。我们发现,MetaDataStore 的内存实现更加适合测试场景,这就减少了反复启动 ZooKeeper 集群以执行一套测试然后将其关闭的成本。

同时,不仅能够减少运行 Pulsar 全套集成测试所需的资源量,而且还能够减少测试的时间。

通过利用 MetaDataStore 的内存实现,Pulsar 项目的构建和发布周期将会大大缩减,构建、测试和发布也能够更快地变更到社区。

第五步:创建基于 Etcd 的实现

鉴于 Pulsar 云原生的设计架构,ZooKeeper 最明显的替代者便是 etcd。etcd 是一致性、高可用的键值存储系统,用作 Kubernetes 的所有集群元数据的存储。

除了其社区不断扩大且活跃,项目的广泛使用,以及性能和可扩展性的改进之外,作为控制面的一部分,etcd 早已在 Kubernetes 中可用。由于 Pulsar 天然支持在 Kubernetes 内运行,在大多数生产环境中都可以直接访问到运行的 etcd 实例,因此用户可以直接使用已有的 etcd,而不会额外增加 ZooKeeper 带来更多运营成本。

47d8ba459008dd7a5cf20ef8c90629a0.png

图 2: 当在 Kubernetes 中运行 Pulsar 时,用户可以使用已有的 etcd 实例来简化部署

利用在 Kubernetes 集群内运行的现有 etcd 服务来作为元数据存储,用户可以完全不需要运行 ZooKeeper。这不仅减少了 Pulsar 集群的基础设施占用的资源,还减轻了运行和操作复杂的分布式系统所需的运营负担。

etcd 的所带来的性能提升是一项令人特别兴奋的技术进展——etcd 旨在解决与 ZooKeeper 相关的一些问题。对于初学者来说,etcd 完全是用 Go 编写的,ZooKeeper 主要是用 Java 编写的,而 Go 通常被认为是比 Java 性能更高的编程语言。

此外,etcd 使用较新的Raft[2]共识算法,该算法在容错和性能方面与 ZooKeeper 使用的 Paxos 算法差别不大。但是,它比 ZooKeeper 使用的 ZaB 协议更容易理解和实现。

etcd 的 Raft 实现与 Kafka(KRaft)实现的最大区别在于后者使用基于拉的模型进行同步更新,在延迟上略有劣势。Raft 算法的 Kafka 版本也是用 Java 实现的,它在垃圾回收期间可能会出现长时间的停顿。而在基于 Go 语言的 Raft 算法的 etcd 版本中则没有这个问题。

第六步:缩放元数据层

如今,Pulsar 集群扩展的最大障碍是元数据层的存储容量。使用 ZooKeeper 存储此元数据时,必须将数据保留在内存中,以提供较好的延迟性能。用一句话概括便是"磁盘就是 ZooKeeper 的死穴"[3]

然而,etcd 中的数据存储方式是 B 树数据结构,而不是 ZooKeeper 使用的分层树结构,etcd 所用的数据存储结构存储在磁盘上并映射到内存中以提供低延迟的访问。

这样做的意义在于,它有效地将元数据层的存储容量从内存规模增加到磁盘规模,使我们能够存储大量的元数据。对比 ZooKeeper 与 etcd ,存储容量从 ZooKeeper 的几 G 内存扩展到了超过 100G 的 etcd 磁盘[4]

安装与更多细节

在过去几年中,Pulsar 成为了最活跃的 Apache 项目之一[5],正如 PIP-45 项目所展示的那样,一个充满活力的社区将继续推动项目的创新和改进。

迫不及待想要尝试去 ZooKeeper 的 Pulsar 吗?下载最新版本的 Pulsar,并在独立模式下运行[6],或者参考文档[7]

除了去除对 ZooKeeper 的强依赖,Apache Pulsar 2.10.0 版本包含来自于 99 位贡献者的 1000 个 commit,引入了多达 300 项重要的更新。即将发布的新版本中还有诸多令人兴奋的技术进展:

  • • 引入 TableView 降低用户构建键值对视图的成本;

  • • 在客户端添加多集群自动故障转移策略;

  • • 增加消息重试指数退避延迟策略;

  • • ……

在上周日的 TGIP-CN 037 直播中,Apache Pulsar PMC 成员,StreamNative 首席架构师李鹏辉为大家介绍了即将发布的 Apache Pulsar 2.10 版本特性,敬请关注本周 Apache Pulsar 公众号推送~

不过可以提前浏览回顾视频哟: 

7ea6f02161ee691071bcf9ecbf907996.png

参考文献

  • • PIP-117: Change Pulsar standalone defaults[8]

  • • Apache ZooKeeper vs. etcd3[9]

  • • Performance optimization of etcd in web scale data scenario[10]

引用链接

[1] PIP-45: https://github.com/apache/pulsar/wiki/PIP-45%3A-Pluggable-metadata-interface
[2] Raft: https://raft.github.io/
[3] "磁盘就是 ZooKeeper 的死穴": https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_commonProblems
[4] 存储容量从 ZooKeeper 的几 G 内存扩展到了超过 100G 的 etcd 磁盘: https://www.alibabacloud.com/blog/fast-stable-and-efficient-etcd-performance-after-2019-double-11_595736
[5] Pulsar 成为了最活跃的 Apache 项目之一: https://blogs.apache.org/foundation/entry/apache-in-2021-by-the
[6] 在独立模式下运行: https://pulsar.apache.org/docs/en/standalone/#start-pulsar-standalone
[7] 文档: https://pulsar.apache.org/docs/en/standalone-docker/
[8] PIP-117: Change Pulsar standalone defaults: https://github.com/apache/pulsar/issues/13302
[9] Apache ZooKeeper vs. etcd3: https://dzone.com/articles/apache-zookeeper-vs-etcd3
[10] Performance optimization of etcd in web scale data scenario: https://www.cncf.io/blog/2019/05/09/performance-optimization-of-etcd-in-web-scale-data-scenario/


▼ 关注「Apache Pulsar」,获取更多技术干货 ▼

👇🏻加入 Apache Pulsar 中文交流群👇🏻

17743251959a2a1386ca3369fd0a156a.png

这篇关于博文推荐|Apache Pulsar 轻装上阵:迈向轻 ZooKeeper 时代的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204021

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

内卷时代无人机培训机构如何做大做强

在当今社会,随着科技的飞速发展,“内卷”一词频繁被提及,反映了各行业竞争日益激烈的现象。对于无人机培训行业而言,如何在这样的时代背景下脱颖而出,实现做大做强的目标,成为每个培训机构必须深思的问题。以下是从八个关键方面提出的策略,旨在帮助无人机培训机构在内卷时代中稳步前行。 1. 精准定位市场需求 深入研究市场:通过市场调研,了解无人机行业的最新趋势、政策导向及未来发展方向。 明确目标

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和