博文推荐|深度解析如何在 Pulsar 中实现隔离
本文作者为 StreamNative 工程师李鹏辉、刘昱。
关于 Apache Pulsar
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址:http://github.com/apache/pulsar/
Apache Pulsar 的一大优点是 Pulsar 的多层分片架构和分层资源管理为隔离(isolation)提供了坚实基础,用户可以以所需方式隔离资源,避免资源竞争,保证系统稳定性。
本系列博客将深入讨论 Pulsar isolation[1]。本文为本系列文章的第一篇,主要介绍如何在 Pulsar 中通过以下方式实现隔离:
•单独 Pulsar 集群•共享 BookKeeper 集群•单一 Pulsar 集群
单独 Pulsar 集群
在这种环境中,你需要为隔离单元创建各自的 Pulsar 集群。
工作原理
图 1 展示了如何通过部署单独的 Pulsar 集群实现隔离。
工作原理要点:
•每个 Pulsar 集群[2] 通过 DNS entry point 接入服务,并确保客户端可以通过 DNS entry point 访问集群。客户端可以使用一个或多个 Pulsar URL,该 URL 是 Pulsar 集群的连接地址。
•每个 Pulsar 集群有一个或多个 broker[3] 和 bookie[4]。
•每个 Pulsar 集群有一个元数据存储区。
•元数据存储区可以分为 Pulsar 元数据存储区[5] 和 BookKeeper 元数据存储区[6]。本文不区分上述两种元数据存储区,元数据存储区同时包含二者。
•多个 Pulsar 集群共享一个配置存储[7]。
•Pulsar 分层的资源管理为隔离提供了坚实基础。如需隔离命名空间,则需要为命名空间指定集群[8]。集群必须属于租户允许的集群列表[9]。属于该命名空间的 topic 也会分配至该集群。关于如何为命名空间设置集群,参阅 为命名空间设置集群[10]。关于如何管理 Pulsar 集群,参阅管理 Pulsar 集群[11]。
迁移命名空间
如需在不同集群之间迁移命名空间,你需要启用跨地域复制功能,并在数据全部复制到目标集群后关闭跨地域复制功能。关于如何为命名空间设置跨地域复制,参阅为命名空间设置跨地域复制[12]。
扩缩容节点
扩缩容 broker 或 bookie 的操作需在相应集群中进行。
共享 BookKeeper 集群
在这种方式中,你需要部署一个由多个 broker 集群共享的 BookKeeper 集群。
工作原理
图 2 展示了如何通过部署共享 BookKeeper 集群实现隔离。
工作原理要点:
•每个 Pulsar 集群[13] 通过 DNS entry point 接入服务,并确保客户端可以通过 DNS entry point 访问集群。客户端可以使用一个或多个 Pulsar 集群的连接地址。
•每个 Pulsar 集群有一个或多个 broker[14]。
•每个 Pulsar 集群有一个元数据存储区。
•多个 Pulsar 集群共享一个 BookKeeper 集群。
•Pulsar 分层的资源管理为隔离提供了坚实基础。如需隔离命名空间,则需要为命名空间指定集群[15]。集群必须属于租户允许的集群列表[16]。属于该命名空间的 topic 也会分配至该集群。关于如何为命名空间设置集群,参阅 为命名空间设置集群[17]。关于如何管理 Pulsar 集群,参阅管理 Pulsar 集群[18]。
•通过不同 bookie affinity group 实现存储隔离,如图 3。
•所有 bookie 隔离组共享 BookKeeper 集群和元数据存储区。
•每个 bookie 隔离组有一个或多个 bookie。
•用户可以为命名空间指定一个或多个 primary group 或 secondary group[19]。先在 primary group 的 bookie 上创建命名空间中的 topic,再在 secondary group 的 bookie 上创建命名空间中的 topic。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[20]。
迁移命名空间
将命名空间上的消息服务迁移到其他 broker 集群上,需要为命名空间更改集群[21]。将命名空间迁移到其他 bookie affinity group 中,需要更改 bookie affinity group。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[22]。由于所有 broker 集群共享同一 BookKeeper 集群,因此无需复制数据到新的 BookKeeper 集群上。
扩缩容节点
Broker
扩缩容 broker 时,需要注意以下几点:
•扩容 broker 时, 需使用 primary
group 或 secondary
group[23] 为新增 broker 指定 broker 隔离组。
•缩容 broker 时,需确保 broker 隔离组有足够数量的 broker。
Bookie
扩缩容 bookie 时,需要注意以下几点:
•扩容 bookie 时,需为新增 bookie 指定 bookie affinity group。
•缩容 bookie 时,需确保 bookie affinity group 有足够数量的 bookie。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[24]。
单一 Pulsar 集群
使用这种方式实现隔离,只需管理单一 Pulsar 集群,无需部署多个 broker 集群和多个 bookie 集群。
工作原理
图 4 展示了如何通过部署单一 Pulsar 集群实现隔离。
工作原理要点:
•每个 Pulsar 集群[25] 通过 DNS entry point 接入服务,并确保客户端可以通过 DNS entry point 访问集群。客户端可以使用 Pulsar 集群的连接地址。
•通过不同 broker 隔离组实现 broker 隔离(Pulsar 将 topic 分配给特定 broker 隔离中的 broker)。关于如何设置 broker 隔离组,参阅设置 broker 隔离组[26]。
•通过不同 bookie affinity group 实现存储隔离。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[27]。
迁移命名空间
迁移命名空间到其他 broker 隔离组,需要更改命名空间隔离策略。关于如何设置设置命名空间隔离策略,参阅设置命名空间隔离策略[28]。
迁移命名空间到其他 bookie affinity group(不将原始数据移动至目标 bookie affinity group),需要更改 bookie affinity group。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[29]。
扩缩容模式
Broker
扩缩容 broker 时,需要注意以下几点:
•扩容 broker 时, 需使用 primary
group 或 secondary
group[30] 为新增 broker 指定 broker 隔离组。
•缩容 broker 时,需确保 broker 隔离组有足够数量的 broker。
Bookie
扩缩容 bookie 时,需要注意以下几点:
•扩容 bookie 时,需为新增 bookie 指定 bookie affinity group。
•缩容 bookie 时,需确保 bookie affinity group 有足够数量的 bookie。关于如何设置 bookie affinity group,参阅设置 bookie affinity group[31]。
Reference
在生产环境中,用户可以根据需求同时使用本文提到的三种 Pulsar 隔离方法,也可以选择其他方法。一般而言,选择隔离方法时可以参考以下注意事项:某些关键业务(如计费、广告等)使用多个小型 Pulsar 集群,不与其他集群共享存储或本地 ZooKeeper。使用多个小型 Pulsar 集群可以为重要工作负载提供最高级别的隔离。大型企业(拥有多个团队)可以部署一个大型 Pulsar 集群,对不同的隔离组使用不同的命名空间,根据容量或工作负载确定隔离组。例如,有大量扇出的场景与端到端延迟最低场景中使用的硬件不尽相同。
相关阅读
• 博文推荐 | 一文带你看懂 Pulsar 的消息保留和过期策略
• 博文推荐|腾讯专家深度解析 Apache Pulsar 五大应用场景
• 博文推荐|Pulsar 存储空间不释放的问题分析与解决方法
引用链接
[1]
Pulsar isolation: https://pulsar.apache.org/docs/en/next/administration-isolation/
[2]
Pulsar 集群: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[3]
broker: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#brokers
[4]
bookie: https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#basic-terms
[5]
Pulsar 元数据存储区: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#metadata-store
[6]
BookKeeper 元数据存储区: https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage
[7]
配置存储: http://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#configuration-store
[8]
为命名空间指定集群: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-create-em--9
[9]
租户允许的集群列表: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#namespaces
[10]
为命名空间设置集群: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[11]
管理 Pulsar 集群: https://pulsar.apache.org/docs/en/next/admin-api-clusters/
[12]
为命名空间设置跨地域复制: https://pulsar.apache.org/docs/en/next/administration-geo/
[13]
Pulsar 集群: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[14]
broker: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#brokers
[15]
为命名空间指定集群: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-create-em--9
[16]
租户允许的集群列表: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#namespaces
[17]
为命名空间设置集群: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[18]
管理 Pulsar 集群: https://pulsar.apache.org/docs/en/next/admin-api-clusters/
[19]
primary group 或 secondary group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-bookie-affinity-group-em-
[20]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[21]
为命名空间更改集群: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[22]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[23]
primary
group 或 secondary
group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[24]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[25]
Pulsar 集群: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[26]
设置 broker 隔离组: https://pulsar.apache.org/docs/en/next/administration-isolation/#broker-isolation
[27]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[28]
设置命名空间隔离策略: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[29]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[30]
primary
group 或 secondary
group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[31]
设置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
点击“阅读原文”,获取 Apache Pulsar 硬核干货资料!
博文推荐|深度解析如何在 Pulsar 中实现隔离相关推荐
- 深度解析ASP.NET2.0中的Callback机制
callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...
- python中superclass是什么_深度解析并实现python中的super(转载,好文)
大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...
- 深度分析如何在Hadoop中控制Map的数量
深度分析如何在Hadoop中控制Map的数量 guibin.beijing@gmail.com 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数 ...
- linux之getcwd函数解析,如何在Linux 中使用getcwd()函数
如何在Linux 中使用getcwd()函数 发布时间:2021-03-15 17:35:21 来源:亿速云 阅读:106 作者:Leah 这期内容当中小编将会给大家带来有关如何在Linux 中使用g ...
- 干货丨深度解析机器学习五大流派中主算法精髓
Pedro Domingos是华盛顿大学计算机科学与工程学教授,也是国际机器学习协会的联合创始人之一.本文是Pedro Domingos在Google所作的机器学习演讲内容整理. 让我们首先从一个简单 ...
- 【机器学习】深度解析机器学习五大流派中主算法精髓
Pedro Domingos是华盛顿大学计算机科学与工程学教授,也是国际机器学习协会的联合创始人之一.本文是Pedro Domingos在Google所作的机器学习演讲内容整理. 让我们首先从一个简单 ...
- 深度学习————如何在Python中求解函数的解析表达式
1 致谢 感谢杨老师的教导! 2 在Python中求解函数的解析表达式 首先写出函数的表达式,然后使用SymPy函数库求解函数偏导数的解析表达式(符号微分),然后再使用SymPy库将求得的符号微分转换 ...
- h5 vr效果_全景展示h5,深度解读如何在H5中完美融入VR技术
全景展示技术,应该是当下最人们的技术了,各大硬件厂商接连推出VR硬件,也对VR未来进行畅想,仿佛VR全景展示已经真的融入到我们身边了. 然而,全景展示设备也是五花八门,有牛人"纸制" ...
- 深度解析卡尔曼滤波在IMU中的使用
众所周知卡尔曼滤波在处理IMU传感器数据融合中作用巨大,但在实际实现起来并非那么容易:本文从MPU6050入手,分析卡尔曼滤波的使用. 本篇文章需要你在夜深人静的时候.先去冲一杯咖啡.准备一张纸.一支 ...
最新文章
- VisualStudio 合并代码文件
- 通过读源码win10驱动下实现3环的GetEnvironmentVariable
- C++写的一个简单的词法分析器(分析C语言)
- C++数据类型和变量类型。
- 主流Java微服务框架有哪些?-开课吧
- 洛谷 P2488 [SDOI2011]工作安排
- 【python】字典的嵌套
- 更改文件扩展名HTML,文件的后缀名怎么改|更改文件后缀名的方法
- java——编程案例
- linux 网络配置 nm_controlled,LINUX centos7.6修改静态IP与配置参数NM_CONTROLLED
- 码农翻身全年文章精华
- 如果VxRail要发朋友圈
- 管理学原理试题及答案
- 苹果7p服务器维护中,苹果7p无服务怎么解决
- 关闭wps2019的屏保功能
- 高级项目管理-4、项目范围、进度、成本、质量管理
- Python分分钟实现图书管理系统(含代码)
- 【计算机组成原理】一位全加器
- CAT Caterpillar ET is really a exceptional obd2 solution
- Extra semicolon