查看原文
其他

博文推荐|深度解析如何在 Pulsar 中实现隔离

Penghui、Yu ApachePulsar 2021-10-18

本文作者为 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 硬核干货资料!

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存