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

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

内容简介:作者:翟佳编辑: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 的跨地域复制实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

On LISP

On LISP

Paul Graham / Prentice Hall / 09 September, 1993 / $52.00

On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also ......一起来看看 《On LISP》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具