本文作者为 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 中实现隔离相关推荐

  1. 深度解析ASP.NET2.0中的Callback机制

    callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...

  2. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  3. 深度分析如何在Hadoop中控制Map的数量

    深度分析如何在Hadoop中控制Map的数量 guibin.beijing@gmail.com 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数 ...

  4. linux之getcwd函数解析,如何在Linux 中使用getcwd()函数

    如何在Linux 中使用getcwd()函数 发布时间:2021-03-15 17:35:21 来源:亿速云 阅读:106 作者:Leah 这期内容当中小编将会给大家带来有关如何在Linux 中使用g ...

  5. 干货丨深度解析机器学习五大流派中主算法精髓

    Pedro Domingos是华盛顿大学计算机科学与工程学教授,也是国际机器学习协会的联合创始人之一.本文是Pedro Domingos在Google所作的机器学习演讲内容整理. 让我们首先从一个简单 ...

  6. 【机器学习】深度解析机器学习五大流派中主算法精髓

    Pedro Domingos是华盛顿大学计算机科学与工程学教授,也是国际机器学习协会的联合创始人之一.本文是Pedro Domingos在Google所作的机器学习演讲内容整理. 让我们首先从一个简单 ...

  7. 深度学习————如何在Python中求解函数的解析表达式

    1 致谢 感谢杨老师的教导! 2 在Python中求解函数的解析表达式 首先写出函数的表达式,然后使用SymPy函数库求解函数偏导数的解析表达式(符号微分),然后再使用SymPy库将求得的符号微分转换 ...

  8. h5 vr效果_全景展示h5,深度解读如何在H5中完美融入VR技术

    全景展示技术,应该是当下最人们的技术了,各大硬件厂商接连推出VR硬件,也对VR未来进行畅想,仿佛VR全景展示已经真的融入到我们身边了. 然而,全景展示设备也是五花八门,有牛人"纸制" ...

  9. 深度解析卡尔曼滤波在IMU中的使用

    众所周知卡尔曼滤波在处理IMU传感器数据融合中作用巨大,但在实际实现起来并非那么容易:本文从MPU6050入手,分析卡尔曼滤波的使用. 本篇文章需要你在夜深人静的时候.先去冲一杯咖啡.准备一张纸.一支 ...

最新文章

  1. VisualStudio 合并代码文件
  2. 通过读源码win10驱动下实现3环的GetEnvironmentVariable
  3. C++写的一个简单的词法分析器(分析C语言)
  4. C++数据类型和变量类型。
  5. 主流Java微服务框架有哪些?-开课吧
  6. 洛谷 P2488 [SDOI2011]工作安排
  7. 【python】字典的嵌套
  8. 更改文件扩展名HTML,文件的后缀名怎么改|更改文件后缀名的方法
  9. java——编程案例
  10. linux 网络配置 nm_controlled,LINUX centos7.6修改静态IP与配置参数NM_CONTROLLED
  11. 码农翻身全年文章精华
  12. 如果VxRail要发朋友圈
  13. 管理学原理试题及答案
  14. 苹果7p服务器维护中,苹果7p无服务怎么解决
  15. 关闭wps2019的屏保功能
  16. 高级项目管理-4、项目范围、进度、成本、质量管理
  17. Python分分钟实现图书管理系统(含代码)
  18. 【计算机组成原理】一位全加器
  19. CAT Caterpillar ET is really a exceptional obd2 solution
  20. Extra semicolon

热门文章

  1. PS圆角图片并保留透明背景
  2. VIVO X7玫瑰金与银色边框颜色区分 方案(C++实现)
  3. Linux下运行python自动化脚本
  4. android 实现微信 语音信息 样式
  5. Linux安装omnet++
  6. 代码表白小特效 一个比一个浪漫 !!!快收藏!!
  7. 数据库连接JDBC原理
  8. 工业4.0时代IIoT存储面临哪些挑战
  9. lotus 开源C2优化版本
  10. 高斯贝叶斯(Gaussian Naive Bayes)基于Numpy的python实现