龙空技术网

Apache Pulsar中的地域复制:模式和实践

创业家 199

前言:

目前你们对“apache pulsar官网”都比较注重,你们都需要分析一些“apache pulsar官网”的相关知识。那么小编也在网络上收集了一些有关“apache pulsar官网””的相关知识,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!

作者 | Sijie Guo

编译 | 大愚若智

编辑 | Emily

AI 前线导读: 本文概括介绍了 Pulsar 消息提供常用的多数据中心地域复制模式(全连接、双活、主备以及汇聚),并针对系统监视、容量规划以及限流调节提供了实践建议。 更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

在上一篇文章中,曾经概括介绍了 Apache Pulsar 的地域复制功能。Apache Pulsar 可以使用 Apache BookKeeper 提供的可伸缩流存储,这是一种可跨越多个数据中心,同时支持同步地域复制(借助 Apache BookKeeper)和异步地域复制(在 Pulsar Broker 的层面上配置)的消息系统。本文将介绍跨越多个数据中心配置地域复制的几种常见模式。

异步地域复制简介

首先想简要介绍一下 Apache Pulsar 中异步地域复制的工作原理。图 1 展示了在 3 个数据中心之间为 Apache Pulsar 配置的全连接(Full-mesh)地域复制。

图 1:三个数据中心之间为 Apache Pulsar 配置的全连接地域复制

在上图中,无论生产方(Producer)P1、P2 和 P3 在什么时候分别将消息发布给 Cluster A、Cluster B 和 Cluster C 中的主题 T1,这些消息均会立刻复制到整个集群。一旦完成复制,消费者(Consumer)C1 和 C2 即可从自己所在的集群消耗这些消息。

Pulsar 中的地域复制可针对每个租户启用,但只有在租户能访问所有集群的情况下,才能在这些集群之间启用地域复制。复制是在名称空间的层面上管理的,借此即可在租户能够访问的两个或更多已配置的集群中创建并配置要复制的名称空间。随后,发布到这种名称空间内任何主题中的消息都会复制到所配置的所有集群中。

3 个命令创建全连接地域复制

只需要几条命令即可轻松地在 Apache Pulsar 中启用地域复制(与现有消息系统截然不同,不需要任何额外的复制程序或镜像程序即可实现地域复制)。下文将尝试在 Pulsar 集群之间配置全连接地域复制。

假设有三个数据中心:us-west、eu-central 和 apac-australia。开始操作前,需要在 Pulsar 中创建一个资产(租户),并为该租户提供访问所有这些数据中心的权限。

$ bin/pulsar-admin properties create my-property \ --admin-roles my-admin-role \ --allowed-clusters us-west,eu-central,apac-australia

随后即可针对名称空间配置复制。先创建一个名为 full-mesh 的名称空间:

$ bin/pulsar-admin namespaces create my-property/global/full-mesh

创建后的名称空间并未分配给任何集群,我们需要将其分配给一个或多个集群,为此可使用 set-clusters 命令。下列命令可将该名称空间分配给全部的三个可用集群。

$ bin/pulsar-admin namespaces set-clusters my-property/global/full-mesh \ --clusters us-west,eu-central,apac-australia

运行完这三条命令后,三个数据中心之间就建立了全连接的地域复制。随后,任何数据中心内产生的消息都可自动复制到另外两个数据中心以供使用。

如果随后需要更改复制设置,例如公司建成了第四个数据中心,或关闭了某个现有数据中心,我们可以随时更改复制设置,同时不会对流量产生任何影响。只要配置改动应用到数据中心,所有集群的复制渠道会立刻做出调整或停用。下列例子为 full-mesh 名称空间添加了第四个数据中心:apac-china。

$ bin/pulsar-admin namespaces set-clusters my-property/global/full-mesh \ --clusters us-west,eu-central,apac-australia,apac-china

选择性复制每条消息

默认情况下,全连接名称空间会在集群之间创建全连接复制,消息会复制到该名称空间配置的所有集群。但也可以对复制进行选择性地限制,在应用程序层面上直接为消息指定要使用的复制列表。随后这些消息将只复制到复制列表中定义的子集范围内。

下列代码可以使用 Pulsar Java 客户端生成一条消息,并只复制到 apac-australia 数据中心。

ListrestrictDatacenters = Lists.newArrayList("apac-australia"); Message message = MessageBuilder.create … .setReplicationClusters(restrictDatacenters) .build; producer.send(message);

地域复制的不同模式

通过使用全连接复制,并在发送消息时应用选择性复制信息,即可获得极大的灵活性,借此在任何数量的数据中心之间运行几条命令,即可打造任何类型的复制拓扑。

图 2:跨越三个数据中心的全连接地域复制

除了全连接地域复制,还可以使用其他几种复制模式。

双活复制

这是一种特殊形态的全连接地域复制,只使用两个数据中心,生产者可在任一数据中心中运行并生成消息,消费者也可以在任何数据中心内消耗这些消息。

主备复制

这是一种特殊类型的双活复制。生产者在主数据中心内生成消息,消息复制到备用数据中心但仅仅是为了备份。当主数据中心故障后,备用数据中心将接手并成为主数据中心。随后即可让生产者在备用数据中心(但现在已成为主数据中心)生成消息。

图 3:主备地域复制的配置

汇聚复制

有时候我们可能需要从多个前端数据中心复制消息到一个中央数据中心以实现汇聚。例如,假设有三个前端数据中心:front1、front2 和 front3,以及一个汇聚数据中心(假设叫 aggregated)。随后为 front1 数据中心使用的主题创建名称空间 front1-aggregation,为 front2 数据中心使用的主题创建名称空间 front2-aggregation,并为 front3 数据中心使用的主题创建名称空间 front3-aggregation。最后可将 aggregated 数据中心分配到这些名称空间。

图 4:跨越四个数据中心的汇聚地域复制

汇聚和边缘计算

汇聚模式通常会被用于将物联网消息从边缘复制到云端,Pulsar 可以非常轻松地支持这种做法。该技术的灵活性以及高效实用的复制管理工具使得该技术成为边缘计算的关键。借此,用户完全不再需要设置非常繁琐的复制程序或镜像程序。

地域复制的最佳实践

除了自行设置地域复制架构过程中的常规指导,建议大家能考虑测下列这些最佳实践。

密切监视复制积压

Pulsar 集群的监视对业务很重要。最重要的是,在使用地域复制的情况下,产生网络分区,或多个数据中心之间网络性能的退化的可能性会远远高过只使用一个数据中心的时候。因此一定要密切监视复制状态,尤其要注意是否存在复制积压。

复制积压是指源集群已经生成了一系列消息,但尚未复制到其他远程集群。我们必须监视复制积压的主要原因有两个:

如果有必要从源数据中心故障转移至目标数据中心,那么所有在源位置生成但尚未复制到目标位置的消息将暂时不可用,直到源数据中心重新上线才能恢复。目标位置进行的任何消息处理工作都会因为积压而产生延迟。通常只会积压几条消息(取决于数据中心之间的网络延迟),但如果存在网络分区,数量可能会增多。如果积压数量持续增长,这代表复制吞吐率低于源集群产生新消息的速率(例如源集群中的生产者正在以 100 MB/s 的速度产生消息,而 Pulsar 复制消息的速度只能达到 50 MB/s),此时有必要在远程数据中心增加更多 Broker,或增加数据中心之间的带宽。

有关复制状态如何监视,具体监视社么的详细信息,请阅读有关 Pulsar 状态的文档。

数据中心故障后的容量规划

在为多个数据中心设计地域复制规划时,另一个重要问题是必须确保,如果一个或多个数据中心故障,消息(Apache Pulsar 中的 Broker)以及存储组件(Apache BookKeeper 中的 Bookie)能够承受足够长时间的构建积压,时间可能从数小时到数天不等。至少要保证故障转移集群具备足够的容量以存储故障转移过来的所有流量。

另外需要注意,当跨数据中心网络的故障成功解决后,必须要能提供足够的网络或 I/O 带宽,以便能用比新消息生成更快的速度尽快排空积压的消息,同时不能对现有流量产生影响。

复制的限流调节

当一个数据中心出现故障后,目标集群会积累大量消息。当故障的数据中心恢复后,Pulsar 需要将目标集群积累的消息重新复制回源集群。由于积压的大量内容需要通过复制排空,因此需要密切注意积压内容的排空速率,并为重要主题的 I/O 配置高优先级,对不那么重要的主题进行限流调节。这样即可确保业务可以尽快恢复至常态。

例如,可以这样在名称空间中针对每个主题限制排空速率:

$ bin/pulsar-admin namespaces set-dispatch-rate my-property/global/full-mesh \ --msg-dispatch-rate 20000

本文来自AI前线,创业家系授权发布,略经编辑修改,版权归作者所有,内容仅代表作者独立观点。[ 下载创业家APP,读懂中国最赚钱的7000种生意 ]

标签: #apache pulsar官网