作者:翟佳
本文为跨地域复制系列文章的第一篇,下一篇我们会介绍如何在三个数据中心中搭建全联通的数据复制。
在大型的分布式系统中,都会涉及到跨多个数据中心的需求,通常会使用跨地域复制机制提供额外的冗余防止服务无法正常运作。Apache Pulsar 在设计之初就加入了对 Yahoo 全球十多个机房的跨地域复制的需求。Apache Pulsar 的跨地域多机房互备特性,是 Pulsar 企业级特性的重要组成部分,它在保证数据稳定可靠的同时,为用户提供了便捷的操作和管理。
本文将介绍 Apache Pulsar 中的跨地域复制的原理及其简单的设置使用方法。
01
原理
Pulsar 自带的跨地域复制机制(Geo-Replication)可以提供一种全连接的异步复制。它是怎么工作的呢?通过下图,我们来解释下它的工作原理。
图一
在上图系统中,有三个数据中心:Cluster-A、 Cluster-B、 Cluster-C。用户创建的一个 Topic 主题 T1 设置了跨越三个数据中心做互备。在三个数据中心中,分别有三个生产者:P1、P2、P3,它们往主题 T1 中发布消息;有两个消费者:C1、C2,订阅了这个主题,接收主题中的消息。
当消息由本数据中心的生产者发布成功后,会立即复制到其他两个数据中心。消息复制完成后,消费者不仅可以收到本数据中心产生的消息,也可以收到从其他数据中心复制过来的消息。
它的工作机制是在 Broker 内部,为跨地域的数据复制启动了一组内嵌的额外生产者和消费者。当外部消息产生后,内嵌的消费者会读取消息;读取完成后,调用内嵌的生产者将消息立即发送到远端的数据中心。更多实现细节,可以参考 Pulsar 代码中的 Replicator。
02
跨地域复制和 Pulsar 的“多租户”
”多租户“是 Pulsar 的重要企业级特性之一。Pulsar的“租户”(Tenant)为 Pulsar 提供了便捷的管理和隔离。跨地域复制需要设置“租户”在数据中心之间的访问权限。
Namespace 是“租户”下的一个管理单元,可以把Namespace 看做一组 Topics 的组合。通过“租户”和 Namespace, Pulsar 为用户提供了层级化的 Topics 管理。
图二
跨地域复制在“租户”中设置了连通性;在 Namespace 中设置具体选择和哪些集群做连接复制。
03
消息的持久化和复制
在配置了跨地域复制后,每个发送进来的消息,首先被保存在本地集群中;然后异步地推送到远端的集群。如果本地集群和远端集群之间没有网络问题,消息会被立即推送给远端集群。这样端到端的发送延迟主要由集群之间网络的 [Round-Trip-Time] 决定。
在图1中,无论生产者(Producer)P1、P2 和 P3 在什么时候分别将消息发布给 Cluster A、 Cluster B 和 Cluster C 中的主题 T1,这些消息均会立刻复制到整个集群。一旦完成复制,消费者(Consumer)C1 和 C2 即可从自己所在的集群消耗这些消息,并且保持消息在每个 Producer 内部的发送顺序。
因为消息已经从其他远端集群发送到本地集群的 Topic,所以每个集群内部都会保留这个 Topic 中产生的所有消息。对于每个 Consumer 来说,Consumer 的订阅(subscription,维护 Consumer 对 Topic 的消费和 ack 的位置)是针对本地集群的 Topic,相当于 Consumer 消费本地集群的消息。
04
使用
对于一个已经配置好的跨地域多集群的环境,只需要三个命令就可以完成跨地域-多集群-全连通的配置。
假设已经搭建了三个数据中心(china-west,china-east,china-north)
1.首先创建一个租户,并给予访问三个数据中心的权限。
$ bin/pulsar-admin tenants create my-tenant \
--admin-roles my-admin-role \
--allowed-clusters china-west,china-east,china-north
2.创建一个 Namespace。
$ bin/pulsar-admin namespaces create my-tenant/my-namespace
3.设置 Namespace 中 Topic 在哪些数据中心之间进行互备。
$ bin/pulsar-admin namespaces set-clusters my-tenant/my-namespace \
--clusters china-west,china-east,china-north
如果随后需要更改复制设置,例如建成了第四个数据中心,或关闭了某个现有数据中心,可以随时更改复制的集群配置,同时不会对流量产生任何影响。只要配置改动应用到数据中心,所有集群的复制渠道会立刻做出调整或停用。比如用这个命令可以为 Namespace 添加了第四个数据中心:china-south 。
$ bin/pulsar-admin namespaces set-clusters my-tenant/my-namespace \
--clusters china-west,china-east,china-north,china-south
结语
Apache Pulsar 提供了便捷的工具,帮助用户统筹管理多机房间的数据复制:管理每个 Namespace 中的 Topic 被复制到哪些机房,数据在多个机房中的状态,数据复制过程中的监控和告警功能等。在多个机房间网络不通的场景下,Pulsar 借助底层 BookKeeper 存储功能,提供了从几小时到几天的 backlog 管理能力,在网络连通恢复后的流控能力,提供“新数据”和“ backlog 数据”在网络间的优先级管理和调整的能力。
本文从原理、特性、使用等方面介绍了 Apache Pulsar 中的跨地域复制。在下一篇文章中,我们会用 step-by-step 的方式,在三个数据中心中搭建全联通的数据复制。