博文推荐|深度解析如何在 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 集群实现隔离。
工作原理要点:
迁移命名空间
如需在不同集群之间迁移命名空间,你需要启用跨地域复制功能,并在数据全部复制到目标集群后关闭跨地域复制功能。关于如何为命名空间设置跨地域复制,参阅为命名空间设置跨地域复制[12]。
扩缩容节点
共享 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
扩缩容 broker 时,需要注意以下几点:
•扩容 broker 时, 需使用 primary
group 或 secondary
group[30] 为新增 broker 指定 broker 隔离组。
•缩容 broker 时,需确保 broker 隔离组有足够数量的 broker。
Bookie
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 硬核干货资料!