apache-pulsar-2.10.0集群安装

apache-pulsar-2.10.0集群安装


​ 本文将展示如何apache-pulsar-2.10.0集群

1. Pulsar简介

1.1 Pulsar 的关键特性

  • Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。
  • 极低的发布延迟和端到端延迟。
  • 可无缝扩展到超过一百万个 topic。
  • 简单的客户端 API,支持 Java、Go、Python 和 C++。
  • 支持多种 topic 订阅模式(独占订阅、共享订阅、故障转移订阅)。
  • 通过 Apache BookKeeper 提供的持久化消息存储机制保证消息传递 。
  • 由轻量级的 serverless 计算框架 Pulsar Functions 实现流原生的数据处理。
  • 基于 Pulsar Functions 的 serverless connector 框架 Pulsar IO 使得数据更易移入、移出 Apache Pulsar。
  • 分层式存储可在数据陈旧时,将数据从热存储卸载到冷/长期存储(如S3、GCS)中。

官方文档地址:https://pulsar.apache.org/docs/zh-CN/concepts-overview/

1.2 Pulsar集群组成

  • ZooKeeper 集群(3(或多) 个 ZooKeeper 节点组成)
  • bookie 集群(也称为 BookKeeper 集群,3(或多) 个 BookKeeper 节点组成)
  • broker 集群(3(或多) 个 Pulsar 节点组成)

说明:Pulsar 的安装包已包含了搭建集群所需的各个组件库。本文后续内容基于Pulsar包自带的组件进行;

2. 集群安装

2.1 安装准备

  • JDK版本不低于 JDK 8

  • 下载最新版本pulsar,官方下载地址:https://pulsar.apache.org/zh-CN/download/
    自行下载并上传至服务器,
    或者直接下载:
    wget https://archive.apache.org/dist/pulsar/pulsar-2.10.0/apache-pulsar-2.10.0-bin.tar.gz

  • 解压到指定目录

  tar -zxvf apache-pulsar-2.10.0-bin.tar.gz -C /home/bigdata/apps
  ln -s apache-pulsar-2.10.0 pulsar
  • 指定三台机器,ip示例如下:
    192.168.1.193
    192.168.1.194
    192.168.1.195

  • 当前操作用户为:bigdata

2.2 Zookeeper集群安装

2.2.1 Zookeeper配置文件修改

#在192.168.1.193, 192.168.1.194, 192.168.1.195上分别创建目录
mkdir -pv /home/bigdata/data/zookeeper
mkdir -pv /home/bigdata/dataLog/zookeeper

#192.168.1.193上执行
echo 1 > /home/bigdata/data/zookeeper/myid 
#192.168.1.194上执行
echo 2 > /home/bigdata/data/zookeeper/myid 
#192.168.1.195上执行
echo 3 > /home/bigdata/data/zookeeper/myid

#分别修改三台zookeeper配置
vim /home/bigdata/apps/pulsar/conf/zookeeper.conf

三台机器上zookeeper配置如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/bigdata/data/zookeeper
dataLogDir=/home/bigdata/dataLog/zookeeper
clientPort=12181
admin.enableServer=true
admin.serverPort=9990
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
forceSync=yes
sslQuorum=false
portUnification=false
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=8000
metricsProvider.exportJvmInfo=true
server.1=192.168.1.193:12888:13888
server.2=192.168.1.194:12888:13888
server.3=192.168.1.195:12888:13888

2.2.2 Zookeeper集群启动

#分别启动三台zookeeper: 执行后台运行命令
./bin/pulsar-daemon start zookeeper

#停止zookeeper命令
./bin/pulsar-daemon stop zookeeper

#查看启动情况
ps aux|grep pulsar

#查看端口启动情况
netstat -tpnl |grep 12181

2.2.3 验证ZooKeeper节点是否启动成功

#执行 zookeeper 客户端连接命令
./bin/pulsar zookeeper-shell -server 127.0.0.1:12181
或
./bin/pulsar zookeeper-shell -server 192.168.1.193:12181
./bin/pulsar zookeeper-shell -server 192.168.1.194:12181
./bin/pulsar zookeeper-shell -server 192.168.1.195:12181

#查看所有zk节点数据,命令如下
ls /

#显示如下,表示zk的集群已经搭建好了
[zookeeper]

2.2.4 初始化Zookeeper集群元数据

#先查看端口占用情况,避免后面启动时会报端口占用错误
netstat -tpnl |grep 8080  
netstat -tpnl |grep 8443
netstat -tpnl |grep 6650
netstat -tpnl |grep 6651

# 在任一个 zooKeeper 节点,如:192.168.1.193,初始化集群元数据
# 进入Apache-pulsar 目录
# 执行命令初始化集群元数据
./bin/pulsar initialize-cluster-metadata \
--cluster yx-pulsar-cluster-geo \
--zookeeper 192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181 \
--configuration-store 192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181 \
--web-service-url http://192.168.1.193:18080,192.168.1.194:18080,192.168.1.195:18080 \
--web-service-url-tls https://192.168.1.193:8443,192.168.1.194:8443,192.168.1.195:8443 \
--broker-service-url pulsar://192.168.1.193:6650,192.168.1.194:6650,192.168.1.195:6650 \
--broker-service-url-tls pulsar+ssl://192.168.1.193:6651,192.168.1.194:6651,192.168.1.195:6651

#连接任意一台zookeeper,比如:192.168.1.193
./bin/pulsar zookeeper-shell -server 127.0.0.1:12181
#查询数据
ls /
#显示如下,有bookies,pulsar等信息,表示成功初始化
[admin, bookies, ledgers, pulsar, stream, zookeeper]

2.3 BookKeeper集群安装

2.3.1 BookKeeper配置文件修改

#分别每个节点执行

#创建bookie所需要目录
mkdir -pv /home/bigdata/data/bookkeeper/journal
mkdir -pv /home/bigdata/data/bookkeeper/ledger

#注意下面的配置,修改每个节点对应的ip
# 进入bookie 配置文件目录,编辑 bookkeeper.conf 文件
vim bookkeeper.conf

以192.168.1.193为例,说明bookkeeper.conf配置文件的内容

# advertisedAddress 修改为服务器对应的ip,在另外两台服务器也做对应的修改advertisedAddress=192.168.1.193
advertisedAddress=192.168.1.193

# 修改以下两个文件目录地址
journalDirectory=/home/bigdata/data/bookkeeper/journal
ledgerDirectories=/home/bigdata/data/bookkeeper/ledger

# 修改zk地址和端口信息
zkServers=192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181

#httpServerPort默认也是8000,建议修改,我这里修改为:8100
prometheusStatsHttpPort=8100

2.3.2 初始化Bookkeeper集群元数据

# 执行初始化元数据命令;若出现提示,输入 Y,继续(只需在任意一个bookie节点执行一次)
./bin/bookkeeper shell metaformat

# 响应
2022-06-14T17:38:15,661+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-06-14T17:38:15,661+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.io.tmpdir=/tmp
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.compiler=<NA>
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.name=Linux
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.arch=amd64
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.version=3.10.0-1062.el7.x86_64
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.name=bigdata
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.home=/home/bigdata
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.dir=/home/bigdata/apps/apache-pulsar-2.10.0
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.free=1898MB
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.max=2048MB
2022-06-14T17:38:15,662+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.total=2048MB
2022-06-14T17:38:15,672+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181 sessionTimeout=30000 watcher=org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase@68f4865
2022-06-14T17:38:15,695+0800 [main] INFO  org.apache.zookeeper.common.X509Util - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2022-06-14T17:38:15,705+0800 [main] INFO  org.apache.zookeeper.ClientCnxnSocket - jute.maxbuffer value is 1048575 Bytes
2022-06-14T17:38:15,733+0800 [main] INFO  org.apache.zookeeper.ClientCnxn - zookeeper.request.timeout value is 0. feature enabled=false
2022-06-14T17:38:15,767+0800 [main-SendThread(192.168.1.193:12181)] INFO  org.apache.zookeeper.ClientCnxn - Opening socket connection to server centos7-pulsar-c21/192.168.1.193:12181.
2022-06-14T17:38:15,768+0800 [main-SendThread(192.168.1.193:12181)] INFO  org.apache.zookeeper.ClientCnxn - SASL config status: Will not attempt to authenticate using SASL (unknown error)
2022-06-14T17:38:15,780+0800 [main-SendThread(192.168.1.193:12181)] INFO  org.apache.zookeeper.ClientCnxn - Socket connection established, initiating session, client: /192.168.1.195:39384, server: centos7-pulsar-c21/192.168.1.193:12181
2022-06-14T17:38:15,799+0800 [main-SendThread(192.168.1.193:12181)] INFO  org.apache.zookeeper.ClientCnxn - Session establishment complete on server centos7-pulsar-c21/192.168.1.193:12181, session id = 0x10001dd180e0001, negotiated timeout = 30000
2022-06-14T17:38:15,808+0800 [main-EventThread] INFO  org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase - ZooKeeper client is connected now.
Ledger root already exists. Are you sure to format bookkeeper metadata? This may cause data loss. (Y or N) Y
2022-06-14T17:38:41,069+0800 [main] INFO  org.apache.bookkeeper.discover.ZKRegistrationManager - Successfully formatted BookKeeper metadata
2022-06-14T17:38:41,185+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x10001dd180e0001 closed
2022-06-14T17:38:41,185+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x10001dd180e0001

看到“Successfully formatted BookKeeper metadata”表明成功!

2.3.3 BookKeeper集群启动

各个节点配置好后,分别执行以下命令启动BookKeeper:

#启动bookie命令,以后台进程启动bookie
./bin/pulsar-daemon start bookie

bookie关闭命令如下:

./bin/pulsar-daemon stop bookie

验证是否启动成功:

./bin/bookkeeper shell bookiesanity

# 响应
2022-06-14T17:40:59,217+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-06-14T17:40:59,217+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.io.tmpdir=/tmp
2022-06-14T17:40:59,217+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:java.compiler=<NA>
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.name=Linux
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.arch=amd64
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.version=3.10.0-1062.el7.x86_64
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.name=bigdata
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.home=/home/bigdata
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:user.dir=/home/bigdata/apps/apache-pulsar-2.10.0
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.free=1890MB
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.max=2048MB
2022-06-14T17:40:59,218+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Client environment:os.memory.total=2048MB
2022-06-14T17:40:59,226+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181 sessionTimeout=30000 watcher=org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase@71e9ebae
2022-06-14T17:40:59,252+0800 [main] INFO  org.apache.zookeeper.common.X509Util - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2022-06-14T17:40:59,261+0800 [main] INFO  org.apache.zookeeper.ClientCnxnSocket - jute.maxbuffer value is 1048575 Bytes
2022-06-14T17:40:59,289+0800 [main] INFO  org.apache.zookeeper.ClientCnxn - zookeeper.request.timeout value is 0. feature enabled=false
2022-06-14T17:40:59,328+0800 [main-SendThread(192.168.1.195:12181)] INFO  org.apache.zookeeper.ClientCnxn - Opening socket connection to server centos7-pulsar-c23/192.168.1.195:12181.
2022-06-14T17:40:59,328+0800 [main-SendThread(192.168.1.195:12181)] INFO  org.apache.zookeeper.ClientCnxn - SASL config status: Will not attempt to authenticate using SASL (unknown error)
2022-06-14T17:40:59,343+0800 [main-SendThread(192.168.1.195:12181)] INFO  org.apache.zookeeper.ClientCnxn - Socket connection established, initiating session, client: /192.168.1.195:39832, server: centos7-pulsar-c23/192.168.1.195:12181
2022-06-14T17:40:59,361+0800 [main-SendThread(192.168.1.195:12181)] INFO  org.apache.zookeeper.ClientCnxn - Session establishment complete on server centos7-pulsar-c23/192.168.1.195:12181, session id = 0x30001d8e81e0007, negotiated timeout = 30000
2022-06-14T17:40:59,371+0800 [main-EventThread] INFO  org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase - ZooKeeper client is connected now.
2022-06-14T17:41:01,246+0800 [main] INFO  org.apache.bookkeeper.client.BookKeeper - Weighted ledger placement is not enabled
2022-06-14T17:41:01,385+0800 [main-EventThread] INFO  org.apache.bookkeeper.discover.ZKRegistrationClient - Update BookieInfoCache (writable bookie) 192.168.1.193:3181 -> BookieServiceInfo{properties={}, endpoints=[EndpointInfo{id=bookie, port=3181, host=192.168.1.193, protocol=bookie-rpc, auth=[], extensions=[]}]}
2022-06-14T17:41:01,386+0800 [main-EventThread] INFO  org.apache.bookkeeper.discover.ZKRegistrationClient - Update BookieInfoCache (writable bookie) 192.168.1.194:3181 -> BookieServiceInfo{properties={}, endpoints=[EndpointInfo{id=bookie, port=3181, host=192.168.1.194, protocol=bookie-rpc, auth=[], extensions=[]}]}
2022-06-14T17:41:01,386+0800 [main-EventThread] INFO  org.apache.bookkeeper.discover.ZKRegistrationClient - Update BookieInfoCache (writable bookie) 192.168.1.195:3181 -> BookieServiceInfo{properties={}, endpoints=[EndpointInfo{id=bookie, port=3181, host=192.168.1.195, protocol=bookie-rpc, auth=[], extensions=[]}]}
2022-06-14T17:41:01,577+0800 [main-EventThread] INFO  org.apache.bookkeeper.client.LedgerCreateOp - Ensemble: [192.168.1.195:3181] for ledger: 0
2022-06-14T17:41:01,579+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Create ledger 0
2022-06-14T17:41:02,089+0800 [bookkeeper-io-3-1] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Successfully connected to bookie: 192.168.1.195:3181 [id: 0xa41f5d28, L:/192.168.1.195:47680 - R:192.168.1.195/192.168.1.195:3181]
2022-06-14T17:41:02,127+0800 [bookkeeper-io-3-1] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - connection [id: 0xa41f5d28, L:/192.168.1.195:47680 - R:192.168.1.195/192.168.1.195:3181] authenticated as BookKeeperPrincipal{ANONYMOUS}
2022-06-14T17:41:02,336+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Written 10 entries in ledger 0
2022-06-14T17:41:02,434+0800 [BookKeeperClientWorker-OrderedExecutor-0-0] INFO  org.apache.bookkeeper.client.ReadOnlyLedgerHandle - Closing recovered ledger 0 at entry 9
2022-06-14T17:41:02,480+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Read 10 entries from ledger 0
2022-06-14T17:41:02,518+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Deleted ledger 0
2022-06-14T17:41:02,518+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for 192.168.1.195:3181
2022-06-14T17:41:02,525+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for 192.168.1.195:3181
2022-06-14T17:41:02,525+0800 [bookkeeper-io-3-1] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Disconnected from bookie channel [id: 0xa41f5d28, L:/192.168.1.195:47680 ! R:192.168.1.195/192.168.1.195:3181]
2022-06-14T17:41:04,583+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x30001d8e81e0007 closed
2022-06-14T17:41:04,583+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x30001d8e81e0007
2022-06-14T17:41:04,583+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Bookie sanity test succeeded

看到“Bookie sanity test succeeded”表明成功!

2.4 Pulsar的Broker集群安装

2.4.1 Broker配置文件修改

分别每个节点执行

vim conf/broker.conf

以192.168.1.193为例,说明broker.conf配置文件的内容

# pulsar cluster名,和 ZooKeeper 里初始化元数据时指定的集群名(--cluster yx-pulsar-cluster-geo)相同
clusterName=yx-pulsar-cluster-geo

# 元数据存储URL
metadataStoreUrl=192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181

# 配置数据的元数据存储URL,可以为空,为空将使用metadataStoreUrl
configurationMetadataStoreUrl=192.168.1.193:12181,192.168.1.194:12181,192.168.1.195:12181

# 对外用于查找当前机器的机器名或IP地址,如果不配置,会使用InetAddress.getLocalHost().getHostName()
advertisedAddress=192.168.1.193

# http请求服务端口
webServicePort=18080

2.4.2 Broker集群启动

各个节点配置好后,分别执行以下命令启动Broker:

# 以后台进程启动 broker
./bin/pulsar-daemon start broker

broker关闭命令如下:

./bin/pulsar-daemon stop broker

2.4.3 验证Broker集群是否启动成功

分别每个节点执行

vim conf/client.conf

以192.168.1.193为例,说明.conf配置文件的内容

webServiceUrl=http://localhost:18080/

执行以下命令,查看yx-pulsar-cluster-geo集群 brokers 节点情况

./bin/pulsar-admin brokers list yx-pulsar-cluster-geo
或
./bin/pulsar-admin --admin-url http://192.168.1.193:18080 brokers list yx-pulsar-cluster-geo

显示如下:表式集群搭建成功:

$ ./bin/pulsar-admin --admin-url http://192.168.1.193:18080 brokers list yx-pulsar-cluster-geo
192.168.1.194:18080
192.168.1.195:18080
192.168.1.193:18080

2.4.4 消息收发测试

消费者订阅

#在yx subscription 订阅中 consume 一条消息到topic:yx-tech的命令
./bin/pulsar-client consume yx-tech -s "yx subscription"

开启另一个终端发送数据,观察订阅者收到数据:content:hello-yx

#生产者发送: 向名称为 my-topic 的 topic 发送一条简单的消息 hello-pulsar
#--messages后面双引号中的内容,若以英文逗号分隔,则消息会分开发送
./bin/pulsar-client produce yx-tech --messages "hello-yx"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值