pulsar消息隊列,聊聊 Pulsar: Pulsar 分布式集群搭建

 2023-12-25 阅读 33 评论 0

摘要:一、集群搭建要求 1.1 搭建設計 搭建 Pulsar 集群至少需要 3 個組件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身實例)。這三個集群組件如下: ZooKeeper 集群(3 個 ZooKeeper 節點組成)Broker 集群&#x

一、集群搭建要求

1.1 搭建設計

搭建 Pulsar 集群至少需要 3 個組件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身實例)。這三個集群組件如下:

  • ZooKeeper 集群(3 個 ZooKeeper 節點組成)
  • Broker 集群(3 個 Pulsar 節點組成)
  • Bookkeeper 集群(也稱為 Bookie 集群,3 個 BookKeeper 節點組成)

Pulsar 的安裝包已包含了搭建集群所需的各個組件庫。無需單獨下載 ZooKeeper 安裝包和 BookKeeper 安裝包。(在實際生產環境中,ZooKeeper 我們并不僅僅應用在 Pulsar 上,包括 HBase 等其他的組件也需要依賴,所以生產環境 ZooKeeper 最好使用外置 ZooKeeper 集群環境)

注:如果是在內網測試環境搭建集群,為了避免防火墻造成端口開啟繁瑣,可以關閉服務器防火墻。

1.2 幾種搭建方式

1.2.1 方式 1

  • 官方建議需要 6 臺機器
  • 3 臺用于運行 ZooKeeper 集群,建議使用性能較弱的機器,Pulsar 僅將 ZooKeeper 用于與協調有關的定期任務和與配置有關的任務,而不用于基本操作。
  • 3 臺用于運行 Bookkeeper 集群和 Broker 集群,建議使用性能強勁的機器。

1.2.2 方式 2

但是也可以在一臺機器上同時部署 ZooKeeper,Bookkeeper ,Broker ,也就是最少需要三臺機器就可以部署一個 Pulsar 集群。

1.2.3 方式 3

pulsar消息隊列?其實也還可以在 3 臺機器上部署 ZooKeeper 集群,另外 3 臺機器部署 Bookkeeper 集群,另 3 臺機器部署 Broker 集群,也就是共需要消耗 9 臺機器。

1.3 系統要求

當前,Pulsar 可運行在 64 位 macOS、Linux 和 Windows 上。要想運行 Pulsar,你需要安裝 64 位 JRE/JDK 8 或更新版本。

老周這里采用的是 Pulsar 2.9.1 版本。

安裝包下載:apache-pulsar-2.9.1-bin.tar.gz

1.4 架構介紹

老周這里本來是采用方式 1 來搭建的,踩了坑,Pulsar 2.9.1 版本中 PulsarZooKeeperClient 依賴的 ZooKeeper 是 3.6.3 版本,和我的 zookeeper 版本不兼容,我又不想換掉。所以還是用 Pulsar 內置的 ZooKeeper 吧,故采用方式 2 來搭建。

分布式部署和集群部署、這里老周是 Mac 系統,所以采用 Parallels Desktop 虛擬機來模擬 3 臺機器出來,如果你是 Windows 系統,可以采用 VMware 虛擬機。

虛擬機節點分配如下:

ip地址節點名稱ZooKeeperBookkeeperBroker
10.211.55.7pulsarCluster7QuorumPeerMainMainPulsarBrokerStarter
10.211.55.8pulsarCluster8QuorumPeerMainMainPulsarBrokerStarter
10.211.55.9pulsarCluster9QuorumPeerMainMainPulsarBrokerStarter

二、準備工作

  • 配置三臺主機的/etc/hostname文件,配置主機名稱。

    各個主機分別修改主機名稱,比如 10.211.55.7 這臺主機的主機名稱修改成 pulsarCluster7。

  • 配置/etc/hosts,配置主機名和 ip 地址的映射關系。

    10.211.55.7 pulsarCluster7
    10.211.55.8 pulsarCluster8
    10.211.55.9 pulsarCluster9
    
  • mysql分布式集群、如果主機名顯示還未生效

    執行如下命令,讓修改的主機名和 ip 地址的映射關系立即生效。

    hostname $(cat /etc/hostname)
    
  • 上傳安裝包

    把 Pulsar 的安裝包分別上傳到 pulsarCluster7、pulsarCluster8、pulsarCluster9 主機上去

  • 解壓至 /opt 目錄

    tar -zxf apache-pulsar-2.9.1-bin.tar.gz -C /opt
    

三、Pulsar 集群搭建

3.1 ZooKeeper 集群搭建

cd /opt/apache-pulsar-2.9.1/conf
vim zookeeper.conf

mongo集群搭建、tickTime、dataDir 是修改,其他都是新增。

tickTime=10000
dataDir=/var/riemann/zookeeper/data
dataLogDir=/var/riemann/zookeeper/logserver.1=pulsarCluster7:2888:3888
server.2=pulsarCluster8:2888:3888
server.3=pulsarCluster9:2888:3888

參數說明:
tickTime:服務器之間或客戶端與服務器之間維持心跳的時間間隔
dataDir:當前zookeeper節點的數據存放目錄
dataLogDir:當前zookeeper節點的日志存放目錄
server.1~3:為zookeeper集群的各節點指定編號

# pulsarCluster7、pulsarCluster8、pulsarCluster9都要操作
mkdir -p /var/riemann/zookeeper/data
mkdir -p /var/riemann/zookeeper/log# pulsarCluster7節點操作
echo 1 > /var/riemann/zookeeper/data/myid
# pulsarCluster8節點操作
echo 2 > /var/riemann/zookeeper/data/myid
# pulsarCluster9節點操作
echo 3 > /var/riemann/zookeeper/data/myid

執行后臺運行命令,這個命令是啟動 zookeeper:

cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon start zookeeper

執行 zookeeper 客戶端連接命令:

cd /opt/apache-pulsar-2.9.1/bin
./pulsar zookeeper-shell

客戶端正常連接,就算 zookeeper 啟動好了。

spark分布式環境搭建?在另外兩臺服務器上也執行 ./pulsar-daemon start zookeeper,啟動 zookeeper 之后,在其中一個 zookeeper 節點的機器上,初始化集群元數據(總共只需執行一次):

例如在 pulsarCluster7 上:

./pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper pulsarCluster7:2181 \
--configuration-store pulsarCluster7:2181 \
--web-service-url http://pulsarCluster7:8080,pulsarCluster8:8080,pulsarCluster9:8080 \
--web-service-url-tls https://pulsarCluster7:8443,pulsarCluster8:8443,pulsarCluster9:8443 \
--broker-service-url pulsar://pulsarCluster7:6650,pulsarCluster8:6650,pulsarCluster9:6650 \
--broker-service-url-tls pulsar+ssl://pulsarCluster7:6651,pulsarCluster8:6651,pulsarCluster9:6651

集群元數據說明:

標記說明
–cluster集群名稱
–zookeeperZooKeeper集群的“本地”連接字符串。 該連接字符串只需包含ZooKeeper集群任一臺機器。
–configuration-store整個集群實例的配置存儲連接字符串。 和–zookeeper標記一樣,該連接字符串只需包含ZooKeeper集群中的任一臺機器即可。
–web-service-url集群 web 服務的URL以及端口,這個URL應該是標準的DNS名稱,默認的端口是8080(我們不建議使用其他端口)
–web-service-url-tls如果使用TLS,你必須為集群指定一個 TLS web 服務URL。默認端口是8443(我們不建議使用其他端口)
–broker-service-urlBroker服務的URL,用于與集群中的brokers進行交互。 這個 URL 不應該使用和 web 服務 URL 同樣的 DNS名稱,而應該是用pulsar方案。 默認端口是6650(我們不建議使用其他端口)。
–broker-service-url-tls如果使用TLS,你必須為集群指定一個 TLS web 服務URL,以及用于集群中 broker TLS 服務的URL。 默認端口是6651(不建議使用其他端口)。

注:如果沒有DNS服務器,也可以使用多主機(multi-host)格式的service-url設置web-service-url,web-service-url-tls,broker-service-url,broker-service-url-tls。

看到這個日志的話,說明初始化 Broker 集群元數據成功了。在這里插入圖片描述
也可以通過./pulsar zookeeper-shell 進入 zk 控制臺,通過 ls / 查看所有 zk 節點。如果能看到 bookies,ledgers 等節點,則說明初始化成功了。

微服務分布式?如果需要關閉 zookeeper,可使用命令:

cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon stop zookeeper

3.2 BookKeeper 集群搭建

在每個部署 bookkeeper 的機器上,修改如下關鍵配置項:

mkdir -p /var/riemann/pulsar/data/journal
mkdir -p /var/riemann/pulsar/data/ledgerscd /opt/apache-pulsar-2.9.1/conf
vim bookkeeper.conf# 修改其第56行,修改本地ip地址。
advertisedAddress=pulsarCluster7
# 修改其第39行
journalDirectory=/var/riemann/pulsar/data/journal
# 修改其第400行
ledgerDirectories=/var/riemann/pulsar/data/ledgers
# 修改其第628行
zkServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第570行
prometheusStatsHttpPort=8100

注:

  1. prometheusStatsHttpPort默認是8000,但實際上在bookkeeper.conf中,httpServerPort默認也是8000,會導致端口被占用。
  2. 上面的advertisedAddress需要設置為對應機器的ip,而不是全設置為同一個,其它兩個機器同理設置成pulsarCluster8、pulsarCluster9。
  3. 參數說明:
    advertisedAddress:指定當前節點的主機名或IP地址
    zkServers:指定zookeeper集群,用來將bookkeeper節點的元數據存放在zookeeper集群
    journalDirectories:當前bookkeeper節點的journal數據存放目錄。 如果需要提高磁盤寫入性能,可以指定多個目錄用來存放journal數據,關鍵是每一個目錄必須在不同的磁盤,不然反而會影響寫入性能。
    ledgerDirectories:當前bookkeeper節點的ledger存放目錄

執行初始化元數據命令,若出現提示,輸入Y繼續(該步驟只需在一個bookie節點執行一次,總共只需執行一次):

./bookkeeper shell metaformat

在三臺機器上,分別輸入以下命令來以后臺進程啟動 bookie:

./pulsar-daemon start bookie

分布式融合。驗證是否啟動成功:

./bookkeeper shell bookiesanity

出現Bookie sanity test succeeded則代表啟動成功。
在這里插入圖片描述
如果需要關閉 bookkeeper,可使用命令:

./pulsar-daemon stop bookie

3.3 Broker 集群搭建

在每個部署 Broker 的機器上,通過編輯 Broker 配置文件,修改如下關鍵配置項:

cd /opt/apache-pulsar-2.9.1/conf
vim broker.conf# 修改其第101行,修改集群的名稱。
# clusterName與前面zookeeper初始化的cluster一致
clusterName=pulsar-cluster
# 修改其第23行,配置zk集群的地址。
zookeeperServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第26行,配置zk集群的地址。
configurationStoreServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第47行,更改為本地主機名。
advertisedAddress=pulsarCluster7

注:

  1. 上面的advertisedAddress需要設置為對應機器的ip,而不是全設置為同一個,其它兩個機器同理設置成pulsarCluster8、pulsarCluster9。
  2. 參數說明:
    zookeeperServers:指定zookeeper集群,用來將broker節點的元數據存放在zookeeper集群
    configurationStoreServers:多集群部署時管理多個pulsar集群元數據的zookeeper集群地址,單集群部署時可以和zookeeperServers設置一樣。
    advertisedAddress:指定當前節點的主機名或IP地址
    clusterName:指定pulsar集群名稱

在每個部署 Broker 的機器上,以后臺進程啟動 Broker。

cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon start broker
# 注:pulsarCluster7、pulsarCluster8、pulsarCluster9 三個節點依次啟動

? 如果需要關閉 broker,可使用命令:

?./pulsar-daemon stop broker

查看集群 brokers 節點是否啟動成功

./pulsar-admin brokers list pulsar-cluster

我們部署正常的話,這一步會顯示如下結果;

“pulsarCluster7:8080”
“pulsarCluster9:8080”
“pulsarCluster8:8080”

在這里插入圖片描述
代表此時集群內有存活的節點: pulsarCluster7、pulsarCluster8、pulsarCluster9,端口號都是8080。
到此,Pulsar 的分布式集群搭建成功!

四、測試

4.1 模擬開啟消費者監聽數據

pulsarCluster8 節點模擬消費者
在這里插入圖片描述

4.2 模擬開啟生產者生產數據

pulsarCluster9 節點模擬生產者
在這里插入圖片描述

4.3 消費者成功接收消息

在這里插入圖片描述

五、遇到的問題

5.1 zookeeper 配置 tickTime 參數小了

安裝內置的 zookeeper 的過程中,遇到了錯誤。

Unable to read additional data from server sessionid 0x0, likely server has closed socket

把 tickTime 參數調成 10000 就好了。

也有可能是其它原因導致的:

  • zookeeper 集群未成功啟動
    zookeeper 你配置的是集群,但你只啟動了一個節點,,zookeeper 就會認為服務處于不可用狀態。zookeeper 有個選舉算法,當整個集群超過半數機器宕機,zookeeper 會認為集群處于不可用狀態。所以,3 臺機器只啟動一臺無法連接,如果啟動 2 臺及以上就可以連接了。
  • 防火墻未關閉
    顯示防火墻狀態
    systemctl status firewalld
    關閉防火墻
    systemctl stop firewalld

5.2 內存不足

在這里插入圖片描述
官網要求,jvm 內存需要在 2g,而我的虛擬機只有 1g 的內存,導致 broke r創建失敗。

這里需要關掉虛擬機增加內存。或者更改參數來調整分配的大小。

默認情況下,Pulsar 為啟動分配 2G JVM 堆內存。可以在 PULSAR_MEM 下的 conf/pulsar_env.sh 文件中修改。這是傳遞給 JVM 的額外選項。
但是修改這個之后發現還是報這個錯誤,所以可能這個必須要給 2G 以上的內存才可以。

重新分配內存之后,重新按照步驟依次啟動 zookeeper、bookeeper、broker,然后查看集群,三個節點的信息全部都正常。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/196797.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息