收录于话题
#TGIP-CN 内容回顾
22个内容
上周日,TGIP-CN 004 继续为大家讲述了 Geo Replication 跨机房复制。后续大家还想了解关于 Pulsar 的任何问题,都可以去这个 repo 下提 issue。同时关于每一次直播的各种参考细节,也可以在此 repo 下找到。https://github.com/streamnative/tgip-cn一起来看下到底什么是 geo replication 吧。
Geo replication 其实就是跨机房复制,详细来说就是:把分散在不同地域的集群通过一定的配置方式,让各集群之间可以相互复制。比如上图中的三个集群,以相互联通的方式进行复制,这种模式也叫 full mesh。Geo replication 里最核心的一个概念是 Configuration Store(老版本中称为 Global ZooKeeper),它存储的是集群复制信息,让集群之间互相了解各自的地址。同时还包括一些 clients 或 namespace 的相关配置信息。这样做的目的可以简化操作,只需一步即可将各个集群信息一同更新。一个是 allowed cluster。在 geo replication 状态下创建租户时,需要进行的一个操作。指在一个 geo replication 集群里,指定某个租户的数据可以允许放置在哪几个集群里。第二个是 replicated clusters。即在 namespace 层面里,指定 namespace 在哪几个集群之间进行相互复制。
我们将上边提到的 full mesh replication 简化到两个集群间的复制。如下图,两个集群分别在北京和上海,同时两地均有 producer 和 consumer。北京的 producer 会先将消息发给本地集群 topic,然后创建一个 replication cursor,用于专门复制的游标。Cursor 创建后,北京的集群同时会创建一个 replication producer,即 cursor 对应一个 producer。这个 replication producer 会将北京集群的数据读出,通过生产方式发送到远端机房(上海集群)。上海集群收到后会将其存在相同名字的 topic 里,这时在上海集群的 consumer 就会收到来自北京集群发送的消息。同理上海集群也会反向传给北京集群,所以达到了双向复制的效果。即两个 producer 都可以同时在北京和上海发送消息,并拿到完整的数据。这就是 full mesh replication(即 geo replication)。当然也有朋友会提出疑问:因为是双向复制,是不是会出现上海将北京复制给它的消息又复制回去呢?其实不会。因为 producer 在发送消息时,是明确知道消息位于哪个集群的,类似于出门前给你贴了个「地域」标签,用来识别。所以不用担心上面这个问题。有的朋友可能还有疑问:跨机房复制过程中,能否保证数据复制的过程有且只有一次。这个是可以的,因为 Pulsar broker 端是有区域去重的机制。比如北京机房复制消息时,它的 Messageid 是唯一的,所以 replication producer 复制消息时,会在后续产生唯一的 producer name,保证了整个跨机房复制是不会重复的。默认的 Pulsar geo replication 是异步复制,也就是在北京机房生产的消息何时到达上海机房,是取决于两地机房之间的网络延迟。具体关于双向复制 geo replication 的实际操作和利用,可以参考下方视频中 18:00-48:55 时间段的内容来观看此 demo 的展示。
在集群复制时,如果出现多个终端小集群需要复制到一个大集群的场景时,,即上图 123 集群都要将消息复制到 4 里,这时就需要单向复制的操作。另一种方式就是 failover pattern (active 到 standby),大部分情况下是将数据备份到远端机房,远端机房不会有 producer 和 consumer。只有当主机房挂了,producer 和 consumer 会换到从机房,才会开始使用。目前如果使用了 global ZooKeeper 的话,是无法使用以上两种方式进行单向复制的。但是也可以依靠其他途径进行单向复制。因为 global ZooKeeper 唯一的作用是记录集群的配置信息,以及相应的 namespace 配置信息。所以如果想要进行单向复制,其实不需要 global ZooKeeper。具体的操作 demo 可以参考上方视频中 51:12-66:00 时间段的内容。
1. Failover 切换过程中,消费进度可以切换吗?
默认配置是本地消费,2.4.0 引入了复制订阅的概念,会有消费状态的复制,消费状态会随数据一起复制到远端的机房,当使用相同名字的订阅,在迁移的时候会恢复到之前的消费状态2. 如果必须共用一个 ZooKeeper,多集群搭建需要注意什么?3. 跨机房同步过程中,消息只在 BookKeeper 存了一份?集群之间是异步复制的方式,数据是在每一个机房单独存储,可以认为是多份存储。4. Tennant cluster 可以动态修改吗?可以,一旦修改,每个机房都可以收到,每个机房都会 reload。5. Pulsar 尝试过实战跨洲际的 geo replication 吗?有,比如推特在美国的数据中心,就是东西海岸跨机房复制。6.本地 topic 数据是通过一个 producer 将消息写入远端集群,为何会有 replication 的订阅?这个订阅是为了保证能够追踪究竟复制到哪,保证复制过程中不丢失数据。7. 集群大于等于 3 时,是有什么机制阻止跨集群流动的?进行全复制机房设置的时候,消息在复制的时候会加上 replica from 的元数据。8. 详细介绍 geo replication 与 failover 模式,以及如何实现?Failover 模式最核心的是做单向复制,集群看到的复制信息是不一样的,保证数据单向流动,接下来需要开启 replica subscription 的设置,这个时候数据是单项复制,replica subscription 的状态也是单向复制。
本期给大家带来了关于 Pulsar geo replication 的概念和应用描述,希望大家可以通过以上文字和视频 demo 的呈现,更清楚了解 geo replication 的运行机制,进而对 Pulsar 的使用可以更自如。想要获取本次直播的 slides,可以点击「阅读原文」进行查看或下载。更多参考信息可在 TGIP-CN repo 下查看:
https://github.com/streamnative/tgip-cn/tree/master/episodes/004周末继续期待我们的 TGIP 直播吧,直播间等你哦!Zoom 直播间链接:
https://zoom.us/j/238511208?pwd=SEZIMUxvNXlheDR3TERobU5NVFRKdz09
如果你无法通过链接进入,也可以手动输入房间信息:
Meeting ID: 238 511 208
Password: fy436h