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

本文作者为 StreamNative 工程师李鹏辉、刘昱。
关于 Apache Pulsar
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址: http://github.com/apache/pulsar/

Apache Pulsar 的一大优点是 Pulsar 的多层分片架构和分层资源管理为隔离(isolation)提供了坚实基础,用户可以以所需方式隔离资源,避免资源竞争,保证系统稳定性。

本系列博客将深入讨论 Pulsar isolation。本文为本系列文章的第一篇,主要介绍如何在 Pulsar 中通过以下方式实现隔离:

  • 单独 Pulsar 集群
  • 共享 BookKeeper 集群
  • 单一 Pulsar 集群

单独 Pulsar 集群

在这种环境中,你需要为隔离单元创建各自的 Pulsar 集群。

工作原理

图 1 展示了如何通过部署单独的 Pulsar 集群实现隔离。

博文推荐|深度解析如何在 Pulsar 中实现隔离_第1张图片

工作原理要点:

迁移命名空间

如需在不同集群之间迁移命名空间,你需要启用跨地域复制功能,并在数据全部复制到目标集群后关闭跨地域复制功能。关于如何为命名空间设置跨地域复制,参阅为命名空间设置跨地域复制

扩缩容节点

扩缩容 broker 或 bookie 的操作需在相应集群中进行。

共享 BookKeeper 集群

在这种方式中,你需要部署一个由多个 broker 集群共享的 BookKeeper 集群。

工作原理

图 2 展示了如何通过部署共享 BookKeeper 集群实现隔离。

博文推荐|深度解析如何在 Pulsar 中实现隔离_第2张图片

工作原理要点:

  • 每个 Pulsar 集群 通过 DNS entry point 接入服务,并确保客户端可以通过 DNS entry point 访问集群。客户端可以使用一个或多个 Pulsar 集群的连接地址。
  • 每个 Pulsar 集群有一个或多个 broker
  • 每个 Pulsar 集群有一个元数据存储区。
  • 多个 Pulsar 集群共享一个 BookKeeper 集群。
  • Pulsar 分层的资源管理为隔离提供了坚实基础。如需隔离命名空间,则需要为命名空间指定集群。集群必须属于租户允许的集群列表。属于该命名空间的 topic 也会分配至该集群。关于如何为命名空间设置集群,参阅 为命名空间设置集群。关于如何管理 Pulsar 集群,参阅管理 Pulsar 集群
  • 通过不同 bookie affinity group 实现存储隔离,如图 3。

    • 所有 bookie 隔离组共享 BookKeeper 集群和元数据存储区。
    • 每个 bookie 隔离组有一个或多个 bookie。
    • 用户可以为命名空间指定一个或多个 primary group 或 secondary group。先在 primary group 的 bookie 上创建命名空间中的 topic,再在 secondary group 的 bookie 上创建命名空间中的 topic。关于如何设置 bookie affinity group,参阅设置 bookie affinity group

博文推荐|深度解析如何在 Pulsar 中实现隔离_第3张图片

迁移命名空间

将命名空间上的消息服务迁移到其他 broker 集群上,需要为命名空间更改集群。将命名空间迁移到其他 bookie affinity group 中,需要更改 bookie affinity group。关于如何设置 bookie affinity group,参阅设置 bookie affinity group。由于所有 broker 集群共享同一 BookKeeper 集群,因此无需复制数据到新的 BookKeeper 集群上。

扩缩容节点

Broker

扩缩容 broker 时,需要注意以下几点:

  • 扩容 broker 时, 需使用 primary group 或 secondary group 为新增 broker 指定 broker 隔离组。
  • 缩容 broker 时,需确保 broker 隔离组有足够数量的 broker。

Bookie

扩缩容 bookie 时,需要注意以下几点:

  • 扩容 bookie 时,需为新增 bookie 指定 bookie affinity group。
  • 缩容 bookie 时,需确保 bookie affinity group 有足够数量的 bookie。关于如何设置 bookie affinity group,参阅设置 bookie affinity group

单一 Pulsar 集群

使用这种方式实现隔离,只需管理单一 Pulsar 集群,无需部署多个 broker 集群和多个 bookie 集群。

工作原理

图 4 展示了如何通过部署单一 Pulsar 集群实现隔离。

博文推荐|深度解析如何在 Pulsar 中实现隔离_第4张图片

工作原理要点:

  • 每个 Pulsar 集群 通过 DNS entry point 接入服务,并确保客户端可以通过 DNS entry point 访问集群。客户端可以使用 Pulsar 集群的连接地址。
  • 通过不同 broker 隔离组实现 broker 隔离(Pulsar 将 topic 分配给特定 broker 隔离中的 broker)。关于如何设置 broker 隔离组,参阅设置 broker 隔离组
  • 通过不同 bookie affinity group 实现存储隔离。关于如何设置 bookie affinity group,参阅设置 bookie affinity group

迁移命名空间

迁移命名空间到其他 broker 隔离组,需要更改命名空间隔离策略。关于如何设置设置命名空间隔离策略,参阅设置命名空间隔离策略

迁移命名空间到其他 bookie affinity group(不将原始数据移动至目标 bookie affinity group),需要更改 bookie affinity group。关于如何设置 bookie affinity group,参阅设置 bookie affinity group

扩缩容模式

Broker

扩缩容 broker 时,需要注意以下几点:

  • 扩容 broker 时, 需使用 primary group 或 secondary group 为新增 broker 指定 broker 隔离组。
  • 缩容 broker 时,需确保 broker 隔离组有足够数量的 broker。

Bookie

扩缩容 bookie 时,需要注意以下几点:

  • 扩容 bookie 时,需为新增 bookie 指定 bookie affinity group。
  • 缩容 bookie 时,需确保 bookie affinity group 有足够数量的 bookie。关于如何设置 bookie affinity group,参阅设置 bookie affinity group

Reference

在生产环境中,用户可以根据需求同时使用本文提到的三种 Pulsar 隔离方法,也可以选择其他方法。一般而言,选择隔离方法时可以参考以下注意事项:某些关键业务(如计费、广告等)使用多个小型 Pulsar 集群,不与其他集群共享存储或本地 ZooKeeper。使用多个小型 Pulsar 集群可以为重要工作负载提供最高级别的隔离。大型企业(拥有多个团队)可以部署一个大型 Pulsar 集群,对不同的隔离组使用不同的命名空间,根据容量或工作负载确定隔离组。例如,有大量扇出的场景与端到端延迟最低场景中使用的硬件不尽相同。

相关阅读

博文推荐|深度解析如何在 Pulsar 中实现隔离_第5张图片

点击 链接 ,获取 Apache Pulsar 硬核干货资料!

你可能感兴趣的:(博文推荐|深度解析如何在 Pulsar 中实现隔离)