[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

栏目: 编程工具 · 发布时间: 4年前

内容简介:作者:翟佳编辑:Susan

作者:翟佳

编辑:Susan

导读: 之前我们介绍了 Apache Pulsar 跨地域复制的机制和工作原理。本文将通过 docker-compose 的方式搭建一个跨三个集群的 Pulsar 环境,并在三个集群中演示 Pulsar 的跨地域复制。

更多干货请关注微信公众号“StreamNative” 。

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

本文首先会用 docker-compose 来搭建跨三个集群的 Pulsar 环境;接着创建三个客户端分别连接到三个集群中;然后在创建跨集群的租户和 Namespace 后,通过三个客户端发布和接收消息,验证消息是否成功在三个集群中复制。

视  频

使用 docker-compose

搭建跨三个集群的 Pulsar 环境

在 Pulsar 官方网站上有关于 Pulsar 多机房搭建的详细指导:

http://pulsar.apache.org/docs/en/deploy-bare-metal-multi-cluster/

我们在搭建的环境中,用 docker-compose 的方式将上述步骤自动化,方便大家操作和验证。

本文所用的 docker 镜像 apachepulsar/pulsar-test-latest-version ,在 Pulsar 的集成测试中使用,它包含了搭建 Pulsar 集群所用到的服务端的包和工具。用户可以选择下载 Puslar 的 github 代码,然后在根目录下使用命令 “mvn install -DskipTests -Pdocker”,自己构建这个 docker 镜像。也可以用 “docker pull apachepulsar/pulsar-test-latest-version:latest” 命令来拉取这个镜像。

01

docker-compose 文件

Docker-compose 文件, 包含在以下链接中:

https://gist.github.com/jiazhai/1cd48ab6c8f6c3012c895df9746799b5

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

在这个 docker-compose 文件中,我们模拟搭建了三个集群,分别位于北京、上海、广州的机房。每个运行的实例集群中包含 5 个实例,分别是:configuration-store 实例、本地集群 ZooKeeper 实例、本集群初始化实例、Bookie 实例和 Broker 实例。 以北京机房的集群为例:

  1. conf-beijing 实例: 作为 configration-store,运行一个 ZooKeeper 节点,并和其他机房的conf-shanghai、conf-guangzhou 组成一个 ZooKeeper 集群,用来存储 Pulsar 跨集群的服务和协作信息。

  2. zk-beijing 实例 : 作为北京集群的 ZooKeeper 节点,存储北京集群的元数据信息。

  3. init-beijing 实例:用来初始化北京集群在 zk-beijing 中的元数据,在初始化完成后,这个实例会自动退出。

  4. bk-beijing 实例:是北京集群中的 Bookie 节点,用来做为 Pulsar 的存储节点。

  5. broker-beijing 实例:是北京集群中的 Broker 节点,用来提供 Pulsar 的消息服务。

因为需要启动的 docker 实例相对较多,需要给 docker 临时配置更多的 CPU 和内存。

02

启动 docker-compose

准备工作:

1. 保存 docker-compose.yml 文件到本地:

wget https://gist.githubusercontent.com/jiazhai/1cd48ab6c8f6c3012c895df9746799b5/raw/941dd721e99e364a03111f7561dcc82a315f05e7/docker-compose.yml

2. 拉取要用到的 docker 镜像:

docker pull apachepulsar/pulsar-test-latest-version:lates

启动 docker-compose 搭建集群:

  • 在 docker-compose.yml 文件所在的目录下,执行 docker-compose up 命令, 等待启动结束后,在新终端中,执行 docker ps 命令可以看到已经启动的所有实例:

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

03

创建三个 client 实例连接到三个集群

1.  用 docker network list 命令,查看 docker-compose 所用的网络名字。

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

2. 在同一个网络内部,新启动一个 docker 实例,命名为 client-bj,作为连接北京集群的 client。

docker run --name client-bj  -it --rm  --network geodemo_pulsar apachepulsar/pulsar-test-latest-version:latest /bin/bash

3. 在 client 的实例启动之后,默认进入 /pulsar 目录,修改目录中的 conf/client.conf 来连接北京集群的 Broker:broker-beijing。

sed -i "s/localhost/broker-beijing/g” conf/client.conf

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

4. 用同样的方式,创建另外两个连接到上海和广州集群的 client 实例: client-sh、client-gz。设置每个 client 和本地集群中的 Broker 连接。

04

创建跨集群的租户和 Namespace

租户和 Namespace 的创建只需要在某一个集群中操作一次。 我们选择以北京集群为例,在 client-bj 实例中执行命令:

bin/pulsar-admin tenants create my-tenant  --allowed-clusters beijing,shanghai,guangzhou

来创建一个能够联通三个集群的租户,命名为“my-tenant”。

执行命令:

bin/pulsar-admin namespaces create my-tenant/my-namespace --clusters beijing,shanghai,guangzhou

在租户下创建一个 my-namespace 的 Namespace,允许使用三个集群来做复制连接。

05

验证消息跨集群复制

在北京集群中发布消息,验证另外两个集群可以接收到北京集群发送的消息。

在 client-sh 和 client-gz 中分别创建一个对 Namespace 中 topic 的订阅,终端会等待订阅的topic:my-tenant/my-namespace/t1 中的消息。

在 client-sh 中执行:

bin/pulsar-client consume -s "sub-shanghai” my-tenant/my-namespace/t1 -n 0

在 client-gz 中执行:

bin/pulsar-client consume -s "sub-guangzhou” my-tenant/my-namespace/t1 -n 0

在 client-bj 中对 topic:my-tenant/my-namespace/t1 生产 10 条消息,验证订阅另外两个集群的client 是否可以收到北京集群中推送过来的消息:

bin/pulsar-client produce  my-tenant/my-namespace/t1  --messages "hello-from-beijing" -n 10

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

在 client-sh 和 client-gz 中可以看到消息被收到:

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

通过 topic 的 stats 和 stats-internal 可以查看 topic 在各个集群中的状态信息。

bin/pulsar-admin topics stats my-tenant/my-namespace/t1

06

更多的体验

以上所述仅是一个开始,基于这三个集群,用户可以体验更多跨集群复制的操作。

比如对 Namespace 的集群从三个集群设置为两个集群,验证消息的互备状态:

bin/pulsar-admin namespaces set-clusters my-tenant/my-namespace --clusters beijing,shanghai

比如设置 Namespace 的 dispatch 速度,保证集群的写入网卡带宽不会因为多机房之间的互备而受到影响。

bin/pulsar-admin namespaces set-dispatch-rate my-tenant/my-namespace -bd 102400

当然也可以设置 docker-compose 文件中的网络类型,更好地模拟集群之间的网络。比如当一个集群断开服务又恢复后,在有消息积压的情况下,可以查看网络的状况。

更多 Pulsar admin 相关操作,查看 Pulsar admin 页面:

http://pulsar.apache.org/docs/en/pulsar-admin

07

删除所有容器

执行 docker-compose up 命令。

说  明

  • 消息顺序: Pulsar 的跨集群复制中,每个本地集群的 topic 会收到其他集群发送过来的消息,最终每个集群中的同名 topic 都会包含所有集群中消息。但是由于是异步复制,topic 中消息的顺序只能保证同一个 producer 产生的消息顺序,不能保证全局多个集群中消息的顺序。

  • 消费状态:关于 topic 的订阅和消费状态,Pulsar 现有实现只是追踪本地集群中 topic 的状态,并没有在多个集群中同步。当有集群服务不可用而需要切换到新的集群时,需加入全局订阅状态的支持,这一部分预计在下一个版本中实现。

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

结语

在本篇文章中,我们用 step-by-step 的方式,在三个数据中心中搭建全联通的数据复制。主要步骤为:

1. 用 docker-compose 搭建了跨三个集群的 Pulsar 环境;

2. 创建三个客户端分别连接到三个集群中;

3. 创建跨集群的租户和 Namespace 后,通过三个客户端发布和接收消息,验证消息是否成功在三个集群中复制。

更多 Pulsar 跨地域复制的相关内容,请关注我们的公众号后续推送,干货满满哦!

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践

点击“阅读原文”,报名参加 5.11 EventStreaming meetup!


以上所述就是小编给大家介绍的《[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Transcending CSS

Transcending CSS

Andy Clarke、Molly E. Holzschlag / New Riders / November 15, 2006 / $49.99

As the Web evolves to incorporate new standards and the latest browsers offer new possibilities for creative design, the art of creating Web sites is also changing. Few Web designers are experienced p......一起来看看 《Transcending CSS》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具