内容简介:作者:翟佳编辑:Susan
作者:翟佳
编辑:Susan
导读: 之前我们介绍了 Apache Pulsar 跨地域复制的机制和工作原理。本文将通过 docker-compose 的方式搭建一个跨三个集群的 Pulsar 环境,并在三个集群中演示 Pulsar 的跨地域复制。
更多干货请关注微信公众号“StreamNative” 。
本文首先会用 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
在这个 docker-compose 文件中,我们模拟搭建了三个集群,分别位于北京、上海、广州的机房。每个运行的实例集群中包含 5 个实例,分别是:configuration-store 实例、本地集群 ZooKeeper 实例、本集群初始化实例、Bookie 实例和 Broker 实例。 以北京机房的集群为例:
-
conf-beijing 实例: 作为 configration-store,运行一个 ZooKeeper 节点,并和其他机房的conf-shanghai、conf-guangzhou 组成一个 ZooKeeper 集群,用来存储 Pulsar 跨集群的服务和协作信息。
-
zk-beijing 实例 : 作为北京集群的 ZooKeeper 节点,存储北京集群的元数据信息。
-
init-beijing 实例:用来初始化北京集群在 zk-beijing 中的元数据,在初始化完成后,这个实例会自动退出。
-
bk-beijing 实例:是北京集群中的 Bookie 节点,用来做为 Pulsar 的存储节点。
-
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 命令可以看到已经启动的所有实例:
03
创建三个 client 实例连接到三个集群
1. 用 docker network list 命令,查看 docker-compose 所用的网络名字。
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
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
在 client-sh 和 client-gz 中可以看到消息被收到:
通过 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 的状态,并没有在多个集群中同步。当有集群服务不可用而需要切换到新的集群时,需加入全局订阅状态的支持,这一部分预计在下一个版本中实现。
结语
在本篇文章中,我们用 step-by-step 的方式,在三个数据中心中搭建全联通的数据复制。主要步骤为:
1. 用 docker-compose 搭建了跨三个集群的 Pulsar 环境;
2. 创建三个客户端分别连接到三个集群中;
3. 创建跨集群的租户和 Namespace 后,通过三个客户端发布和接收消息,验证消息是否成功在三个集群中复制。
更多 Pulsar 跨地域复制的相关内容,请关注我们的公众号后续推送,干货满满哦!
点击“阅读原文”,报名参加 5.11 EventStreaming meetup!
以上所述就是小编给大家介绍的《[跨地域复制系列](二) Apache Pulsar 的跨地域复制实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 基于时间和地域构建一个网络诈骗形势模型
- DLA实现跨地域、跨实例的多AnalyticDB读写访问
- 如何设置根据不同的IP地址所在地域访问不同的服务?
- MongoDB复制选举原理及复制集管理
- MySQL组复制MGR(二)-- 组复制搭建
- Redis系列(四):Redis的复制机制(主从复制)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。