本文主要介绍安装pulsar和pulsar manager的过程,在安装过程中解决了各种问题。解决了zookeeper版本域pulsar不匹配,8080端口被zookeeper占用。希望对大家有所帮助。
1.安装准备(3台机器)
官网地址:Pulsar官网集群安装地址
(1) jdk安装,jdk8及以上
(2)单独安装zookeeper安装完成要求版本要在3.6.3及以上,否则或报错,后面有我报错的解决方法
(3)确保3台机器都安装完成
(4)防火墙关闭、ssh免登录
(5)同步脚本多台服务器,
修改hostname:hadoop192 hadoop193 hadoop191
#!/bin/bash#1. 判断参数个数if [ $# -lt 1 ]thenecho Not Enough Arguement!exit;fi#2. 遍历集群所有机器for host in hadoop192 hadoop193 hadoop191doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidonedone
2.集群规划
| 集群名称 | 机器IP | 服务名称 |
|---|---|---|
| hadoop191 | 192.168.10.191 | JKD,Zookeeper,BookKeeper,Broker |
| hadoop192 | 192.168.10.192 | JKD,Zookeeper,BookKeeper,Broker |
| hadoop193 | 192.168.10.193 | JKD,Zookeeper,BookKeeper,Broker |
3.验证安装的jdk和Zookeeper
(1)验证jdk
java -version
[root@hadoop191 ~]# java -versionjava version "1.8.0_212"Java(TM) SE Runtime Environment (build 1.8.0_212-b10)Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)[root@hadoop191 ~]#
(2)验证zookeeper
由于信息较长,删除了部分日志内容
[root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkCli.sh -server 127.0.0.1:2181Connecting to 127.0.0.1:21812022-04-30 16:18:36,097 [myid:] - INFO [main:Environment@109] - Client2022-04-30 16:18:36,158 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: 127.0.0.1:44318, server: localhost/127.0.0.1:21812022-04-30 16:18:36,175 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x300004d3c460000, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 127.0.0.1:2181(CONNECTED) 0]
4.pulsar集群部署模式
(1)下载
https://archive.apache.org/dist/pulsar/
选择自己的版本
cd opt/softwarewgethttps://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-2.10.0/apache-pulsar-2.10.0-bin.tar.gz
(2)解压
[root@hadoop191 software]# tar -zxvf apache-pulsar-2.10.0-bin.tar.gz -C ../module/
(3)创建软连接
[root@hadoop191 module]# ln -s apache-pulsar-2.10.0 pulsar_2.10.0
软连接创建后结果

5.修改bookkeeper配置
(1)进入配置目录
cd opt/module/apache-pulsar-2.10.0/conf
(2)打开文件bookkeeper.conf
[root@hadoop191 conf]# vim bookkeeper.conf
(3)修改文件内容
vim中快速到某行:退出编辑模式(esc),然后输入冒号+行号
:行号

#39行journalDirectory=/opt/module/apache-pulsar-2.10.0/tmp/journal# 56行:本机IP 或hostnameadvertisedAddress=hadoop191#405行,创建临时目录ledgerDirectories=/opt/module/apache-pulsar-2.10.0/tmp/ledgers#633行:zookeeker集群zkServers=hadoop191:2181,hadoop192:2181,hadoop193:2181
6.修改broker配置
(1)进入broker.conf文件cd opt/module/apache-pulsar-2.10.0/conf[root@hadoop191 conf]# vim broker.conf(2)修改vroker.conf的内容#23行 Zookeeper quorum connection stringzookeeperServers=hadoop191:2181,hadoop192:2181,hadoop193:2181#26行 Configuration Store connection stringconfigurationStoreServers=hadoop191:2181,hadoop192:2181,hadoop193:2181#47行,本地ip地址或者服务器名称hostnameadvertisedAddress=hadoop191#101行,修改集群名称clusterName=pulsar-cluser
7.将配置好的结果分发到另外2台机器
使用同步脚本进行同步
[root@hadoop191 ~]# sh synfile.sh /opt/module/apache-pulsar-2.10.0
8.在另外2台机器创建软连接
[root@hadoop193 module]# ln -s apache-pulsar-2.10.0/ pulsar_2.10.0
9.修改另外2台broker和bookies的地址
vim bookkeeper.conf# 56行:本机IP 或hostnameadvertisedAddress=hadoop192vim broker.conf#61行,本地ip地址或者服务器名称hostnameadvertisedAddress=hadoop192
10.启动zookeeper集群并检查状态
3台服务器都都启动zookeeper
[root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkServer.sh start检查状态[root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: opt/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost.Mode: leader[root@hadoop193 apache-zookeeper-3.5.7-bin]#
应该是有2个follower和一个leader
11.初始化Pulsar元数据信息
(1)进入目录/opt/module/apache-pulsar-2.10.0
cd opt/module/apache-pulsar-2.10.0/bin
(2)执行初始化
如果一次初始化没有成功,可以再初始化一次试试
只在一台机器上执行
#执行初始化脚本./pulsar initialize-cluster-metadata \--cluster pulsar-cluster \--zookeeper hadoop191:2181,hadoop192:2181,hadoop193:2181 \--configuration-store hadoop191:2181,hadoop192:2181,hadoop193:2181 \--web-service-url http://hadoop191:8080,hadoop192:8080,hadoop193:8080 \--web-service-url-tls https://hadoop191:8443,hadoop192:8443,hadoop193:8443 \--broker-service-url pulsar://hadoop191:6650,hadoop192:6650,hadoop193:6650 \--broker-service-url-tls pulsar+ssl://hadoop191:6651,hadoop192:6651,hadoop193:6651
(3)元素说明
集群元数据说明:cluster集群名称zookeeperZooKeeper集群连接参数,仅需要包含ZooKeeper集群中的一个节点即可configuration-storePulsar实例的配置存储集群(ZooKeeper),多集群部署时才会发挥作用,需要另外部署ZooKeeper集群,但是单集群部署时可以和–zookeeper参数设置一样,只需要包含ZooKeeper集群中的一个节点即可web-service-url集群Web服务的URL+端口,URL是一个标准的DNS名称,默认端口8080,不建议修改。web-service-url-tls集群Web提供TLS服务的URL+端口,端口默认8443,不建议修改。broker-service-url集群brokers服务URL,URL中DNS的名称和Web服务保持一致,URL使用pulsar替代http/http,端口默认6650,不建议修改。broker-service-url-tls集群brokers提供TLS服务的URL,默认端口6551,不建议修改。
(4)初始化错误
2022-04-30T18:42:00,150+0800 [main-SendThread(hadoop192:2181)] INFO org.apache.zookeeper.ClientCnxn - SASL config status: Will not attempt to authenticate using SASL (unknown error)2022-04-30T18:42:00,153+0800 [main-SendThread(hadoop192:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established, initiating session, client: 192.168.10.191:45040, server: hadoop192/192.168.10.192:21812022-04-30T18:42:00,169+0800 [main-SendThread(hadoop192:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server hadoop192/192.168.10.192:2181, session id = 0x20000d08d4e0000, negotiated timeout = 300002022-04-30T18:42:00,171+0800 [main-EventThread] INFO org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase - ZooKeeper client is connected now.2022-04-30T18:42:00,181+0800 [main-SendThread(hadoop192:2181)] WARN org.apache.zookeeper.ClientCnxn - Session 0x20000d08d4e0000 for sever hadoop192/192.168.10.192:2181, Closing socket connection. Attempting reconnect except it is a SessionExpiredException.org.apache.zookeeper.ClientCnxn$EndOfStreamException: Unable to read additional data from server sessionid 0x20000d08d4e0000, likely server has closed socketat org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77) ~[org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) ~[org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1290) [org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]Exception in thread "main" org.apache.pulsar.metadata.api.MetadataStoreException: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented forat org.apache.pulsar.metadata.impl.ZKMetadataStore.<init>(ZKMetadataStore.java:89)at org.apache.pulsar.metadata.impl.MetadataStoreFactoryImpl.newInstance(MetadataStoreFactoryImpl.java:52)at org.apache.pulsar.metadata.impl.MetadataStoreFactoryImpl.createExtended(MetadataStoreFactoryImpl.java:36)at org.apache.pulsar.metadata.api.extended.MetadataStoreExtended.create(MetadataStoreExtended.java:43)at org.apache.pulsar.PulsarClusterMetadataSetup.initMetadataStore(PulsarClusterMetadataSetup.java:338)at org.apache.pulsar.PulsarClusterMetadataSetup.main(PulsarClusterMetadataSetup.java:203)Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented forat org.apache.zookeeper.KeeperException.create(KeeperException.java:106)at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)at org.apache.zookeeper.ZooKeeper.addWatch(ZooKeeper.java:3192)at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient.access$3301(PulsarZooKeeperClient.java:74)at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$23.call(PulsarZooKeeperClient.java:1130)at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$23.call(PulsarZooKeeperClient.java:1124)at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$ZooWorker.syncCallWithRetries(PulsarZooKeeperClient.java:1529)at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient.addWatch(PulsarZooKeeperClient.java:1124)at org.apache.pulsar.metadata.impl.ZKMetadataStore.<init>(ZKMetadataStore.java:82)... 5 more
(5)分析问题:
(5.1)检查原来的配置是否正确
没有任何问题
(5.2)zookeeper版本错误
我自己装的版本是3.5.7与Pulsar中需要的版本3.6.3不一致。
发现错误信息中有zookeeper版本是3.6.3
所以准备重新装给新的版本zookeeper
(6)解决方法:下载新的zookeeper 3.6.3
下载完后,进行初始化,初始化成功,问题解决
(7)初始化完成,只执行一次
初始化后,部分信息如下
2022-05-01T07:03:58,647+0800 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x300000c767100002022-05-01T07:03:58,752+0800 [main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x300000c76710001 closed2022-05-01T07:03:58,752+0800 [main-EventThread] INFO org.apache.pulsar.metadata.impl.ZKSessionWatcher - Got ZK session watch event: WatchedEvent state:Closed type:None path:null2022-05-01T07:03:58,752+0800 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x300000c767100012022-05-01T07:03:58,753+0800 [main] INFO org.apache.pulsar.PulsarClusterMetadataSetup - Cluster metadata for 'pulsar-cluster' setup correctly
12.初始化Pulsar中的bookkeeper
只需要执行一次,以后再使用也不用初始化
(1)进入目录
cd opt/module/apache-pulsar-2.10.0/bin
(2)执行初始化
./bookkeeper shell metaformat
(3)输入Y
er.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
(4)结果信息如下
如果有错误信息可以再初始化一次
Ledger root already exists. Are you sure to format bookkeeper metadata? This may cause data loss. (Y or N) y2022-05-01T07:15:33,874+0800 [main] INFO org.apache.bookkeeper.discover.ZKRegistrationManager - Successfully formatted BookKeeper metadata2022-05-01T07:15:33,979+0800 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x100000c57f300022022-05-01T07:15:33,979+0800 [main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x100000c57f30002 closed
13.启动过程bookie
3个节点都需要依次启动
(1)进入目录
cd /opt/module/apache-pulsar-2.10.0/bin
(2)执行启动
每台机器都执行
./pulsar-daemon start bookie
(3)执行结果
doing start bookie ...starting bookie, logging to opt/module/apache-pulsar-2.10.0/logs/pulsar-bookie-hadoop191.logNote: Set immediateFlush to true in conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.[root@hadoop191 bin]#
(4)验证是否启动成功
三台都进行验证
./bookkeeper shell bookiesanity
5)输出信息中有下面信息说明启动成功
2022-05-01T07:26:21,319+0800 [main] INFO org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Bookie sanity test succeeded
可以通过jps进行验证
14.启动过程-broker
每台机器都执行
(1)进入目录
cd /opt/module/apache-pulsar-2.10.0/bin
(2)执行启动broker
./pulsar-daemon start broker
(3)启动结果

(4)查看集群 brokers 节点情况
./pulsar-admin brokers list pulsar-cluster
(5)检查问题
查看日志,发现端口被占用8080
led to bind to 0.0.0.0:8080at org.apache.pulsar.broker.web.WebService.start(WebService.java:253) ~[org.apache.pulsar-pulsar-broker-2.9.2.jar:2.9.2]at org.apache.pulsar.broker.PulsarService.start(PulsarService.java:686) ~[org.apache.pulsar-pulsar-broker-2.9.2.jar:2.9.2]... 2 moreCaused by: java.io.IOException: Failed to bind to 0.0.0.0:8080
(6)检查端口号
netstat -anp |grep 8080ps -ef |grep 2333

(7)解决端口被占用的方法:修改zookeeper配置有2种方法
(7.1)修改zookeeper端口
cd opt/module/apache-zookeeper-3.6.3-bin/confvim zoo.cfg#修改或增加端口# admin portadmin.serverPort=8887
(7.2)在zookeeper中, 如果不需要 AdminServer ,可以直接禁用:打开 zoo.cfg 配置文件,直接添加以下语句即可。
# 禁用 AdminServer 服务admin.enableServer=false
(8)重新启动zookeeper
所有已经启动的服务关闭重新启动
再次启动zookeeper
启动bookie
启动broker

终于启动成功
(9)解决端口冲突8080方法2:修改pulsar的端
(9.1)每台机器都修改
cd opt/module/apache-pulsar-2.10.0/confvim broker.conf# Port to use to server HTTP requestwebServicePort=8008
(9.2)每台机器修改
cd opt/module/apache-pulsar-2.10.0/confvim client.confclient.conf里的webServiceUrl=http://10.50.30.178:8008
15.验证集群是否正常使用
(1)查看集群 brokers 节点情况
cd opt/module/apache-pulsar-2.10.0/bin[root@hadoop191 bin]# ./pulsar-admin brokers list pulsar-clusterhadoop193:8080hadoop192:8080hadoop191:8080[root@hadoop191 bin]#
(2)消费者
./pulsar-client consume \persistent://public/default/pulsar-cluster \-n 100 \-s "consumer-cluster" \-t "Exclusive"
(3)生产者
./pulsar-client produce \persistent://public/default/pulsar-cluster \-n 1 \-m "Hello Pulsar"

消费掉消息
到此结束安装
16.安装Pulsar监控工具Pulsar Manager
Pulsar Manager官网地址
(1)下载
cd opt/modulewget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz
(2)解压
#解压tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
(3)进入目录
#进入目录cd pulsar-manager
(4)再次解压 pulsar-manager.tar
#再次解压,注意是在里面的目录tar -xvf pulsar-manager.tar
(5)再次进入新的目录
进入目录pulsar-manager,注意是在下一级目录cd pulsar-manager
(6)拷贝文件
cp -r ../dist ui
(7)启动
# 这里可以用后台启动的方式
./bin/pulsar-manager

(8)开启一个新的xshell连接,创建token和账号
CSRF_TOKEN=$(curl <u>http://</u><u>localhost</u><u>:7750/pulsar-manager/csrf-token)</u>curl \-H "X-XSRF-TOKEN: $CSRF_TOKEN" \-H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \-H 'Content-Type: application/json' \-X PUT http://localhost:7750/pulsar-manager/users/superuser \-d '{"name": "admin", "password": "apachepulsar", "description": "test", "email":<u>"username@test.org"}'</u>
(9)页面访问地址
http://192.168.10.191:7750/ui/index.html
输入用户名:admin和密码:apachepulsar




17.总结
终于安装Pulsar和Pulsar manager成功
在安装过程中出现各种问题都在上面有记录,一一解决,看日志还是解决问题必须学习的。
感谢阅读。
期待点赞、分享、关注!
奇迹的出现往往就在再坚持一下的时候!





