部署去ZK后的Apache Pulsar

Posted by 梁远鹏 on 2021-05-22 | 阅读 |,阅读约 2 分钟

TOC

前言

记录我的终端更新笔记 :(

当我们在说元数据中心的时候我们在说什么

Bookkeeper 和 Pulsar Broker 都有各自的元数据中心,并且都有自己的元数据中心接口,默认都是ZK.

要实现 Pulsar 去 Zookeeper 化的话意味着 Pulsar Broker 和 Bookkeeper 都需要拥有这样的能力. Bookkeeper 本身有 etcd 元数据中心接口的实现,但是 Pulsar Broker 也实现了 Bookkeeper 的元数据中心接口,我们这里讨论的 Bookkeeper 对接 etcd 也是使用 Pulsar Broker 自身实现的 Bookkeeper 元数据接口.而不是 Bookkeeper 自带的 etcd 元数据接口实现.

基本上有了这样的框架之后,后续 Pulsar 如果要发展自己的元数据中心会相对比较顺利.

本文示例会以 Pulsar 2.10.0 这个版本,其中配套的 Bookkeeper 版本是 4.14.4,这个版本的 Bookkeeper 的 autoRecovery 逻辑中依然是直接连接了 Zookeeper,因此需要启动时需要在bookkeeper.conf中把 autoRecoveryDaemonEnabled 设置为 false.

部署

部署相关的 yaml 都可以在pulsar-sigs/deploy-files中找到.

首先将仓库 clone 到本地:

git clone https://github.com/pulsar-sigs/deploy-files.git
cd deploy-files

以下 docker-compose 和 kubernetes 部署方式都会以这个仓库的文件作为基础.

docker-compose

kubernetes

$ cd kubernetes
$ kubectl apply -f .
service/bk created
service/bknp created
statefulset.apps/bk created
statefulset.apps/busybox created
service/etcd created
service/etcdnp created
statefulset.apps/etcd created
deployment.apps/pulsar-consumer created
job.batch/pulsar-init created
deployment.apps/pulsar-producer created
service/pulsar created
service/pulsarnp created
statefulset.apps/pulsar created
statefulset.apps/pulsarctl created
serviceaccount/pulsar created
role.rbac.authorization.k8s.io/pulsar created
clusterrole.rbac.authorization.k8s.io/pulsar created
rolebinding.rbac.authorization.k8s.io/pulsar created
clusterrolebinding.rbac.authorization.k8s.io/pulsar created

耐心等待一段时间后所有 Pod 都会处于 Running 状态.

$ kubectl get po
NAME                               READY   STATUS      RESTARTS   AGE
bk-0                               1/1     Running     0          2m38s
etcd-0                             1/1     Running     0          2m38s
pulsar-0                           1/1     Running     0          2m37s
pulsar-consumer-77f96bbf9d-bwspx   1/1     Running     1          2m38s
pulsar-init-gs5f4                  0/1     Completed   0          2m38s
pulsar-producer-9b46f7455-ndtsq    1/1     Running     1          2m37s
pulsarctl-0                        1/1     Running     0          2m38s

假设这时候所有的Pod都已经启动在 Running 了,我们可以看一下 pulsar-client consumer 这个 pod,他会不断的消费 pulsar topi c的消息,正常的话可以看到不断的有日志打印出来.

$ kubectl logs -f pulsar-consumer-77f96bbf9d-bwspx
...
2022/05/22 11:11:55 consume message: topic is persistent://public/default/lan-partition-0 , topic key is : and payload is :hello 
2022/05/22 11:11:56 consume message: topic is persistent://public/default/lan-partition-0 , topic key is : and payload is :hello 

可以看到不断的会有log打印, 这时基于 etcd 元数据中心的 pulsar 已经处于正常的工作状态了.

笔记

  1. function worker 会使用到 Dlog,直接连接的 Zookkeeper.
  2. 有状态的 pulsar function 会使用到 Bookkeeper 的 table service,而 table service 似乎也是连接ZK.

微信公众号

扫描下面的二维码关注我们的微信公众号,第一时间查看最新内容。同时也可以关注我的Github,看看我都在了解什么技术,在页面底部可以找到我的Github。

wechat-qrcode

温馨提示

本文还在持续创作中,如果你对本文主题感兴趣可以加我微信好友进行催更,博客下方可以找到我的微信联系方式 :)