kafka分布式部署與驗證

來源:互聯網
上載者:User

kafka是一個分布式環境下的訊息組件,如果kafka的應用進程被殺或者kafka的機器宕機,那麼kafka訊息組件就無法使用了。

kafka叢集(cluster)

一台機器不夠,那就多搞幾台,首先,啟動zookeeper這個就不多說了.可以參看前文,在啟動kafka的時候,我們在單機類比啟動多個kafka應用.

首先在config目錄,copy兩個server.properties 檔案,這裡我複製三份,分別起名server1.properties ,server2.properties server3.properties

然後修改這三個設定檔,主要修改broker.id=2,port=9094,log.dir=/tmp/kafka-logs-2這三個值,broker.id是用來標記分布式環境中的broker的,要求唯一,port和log.dir一個連接埠,一個log目錄,如果在真實的分布式環境中是不需要修改.這裡單機類比防止連接埠衝突.

分別把broker.id改為1,2,3,log.dir則分別改成kafka-logs-1,kafka-logs-2,kafka-logs-3,然後依次啟動

kafka-server-start.bat ../../config/server1.properties

kafka-server-start.bat ../../config/server2.properties

kafka-server-start.bat ../../config/server3.properties

如果你啟動有報錯,一個就是之前說的那個vm參數太大,另一個可能是你的連接埠沒改好.具體錯誤看下報錯就好了.

然後我們註冊一個topic,叫做replicationtest

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic replicationtest

這裡冗餘是3,分區是1,那麼最終各個broker都會保留一份,最多允許N-1,也就是2台broker宕機,服務照樣運行.

註冊之後,這時候

kafka-topics.bat--describe --zookeeper localhost:2181 --topic replicationtest

執行描述命令,看下叢集情況


叢集描述結果

第一行給出了分區的匯總資訊。每個分區行給出分區資訊。

“Leader” 節點是2.

“Replicas” 資訊,在節點2,3,1上,所有的節點資訊.

“Isr” 工作中的複製節點的集合. 也就是活的節點的集合.

其他的就不用解釋了.這裡選出了2是leader,也就是說2這個節點會給消費者提供服務.

然後我們測試一條資訊.

kafka-console-producer.bat --broker-list localhost:7777,localhost:8888,localhost:9999 --topic replicationtest

上面的7777是server1.properties 中設定的.根據個人情況.改改.然後在控制台發發訊息.

然後消費一下.

kafka-console-consumer.bat --zookeeper localhost:2181 --topic replicationtest

這裡的2181是zookeeper的連接埠,不用改.


目前運行結果

然後.我們開始關掉一個broker,在3的控制台裡CTRL,C.然後是否終止操作,輸入Y.

再發一條訊息


broker3宕機

一切正常.我們看一下叢集資訊


broker3宕機叢集

發現Isr中存活的機器少了3.因為3掛了.

然後我們關掉broker2.這時候,會觸發新的leader選舉.期望值1變成leader,再發一條訊息


broker2宕機

可以看到生產者發訊息過程中,產生了異常,因為和2的串連斷開了.但是注意,訊息並沒有丟,因為觸發了新的選舉.可以看到,消費者還是接到了正常的訊息.叢集情況如下


broker2宕機叢集

至此,kafka的broker叢集測試完畢,那麼剩下的問題來了.消費者啟動的時候串連的是zookeeper的地址,如果這台zookeeper掛了呢.

那麼我們需要zookeeper叢集部署.


zookeeper叢集


這就包括兩部分.

是broker本來要能知道這些zookeeper叢集的地址,當一個宕機的時候,才會切換到另一個zookeeper

消費者要知道這些zookeeper的地址,理由同上.

因此步驟如下.可以自己試一試,比較簡單

複製3份zookeeper.properties檔案,命名為 zookeeper1.properties,zookeeper2.properties,zookeeper3.properties,修改檔案中的 dataDir=/tmp/zookeeper和,clientPort=2181,連接埠分別設定為2181,2182,2183.然後啟動三個 zookeeper

修改kafka啟動配置,server1.properties三個檔案中的zookeeper.connect=localhost:2181 這個配置,逗號隔開.最終為 zookeeper.connect=localhost:2181,localhost:2182,localhost:2183,然後啟動

生產者也改下配置中的.metadata.broker.list=localhost:9092,如果使用命令列啟動就不用改了.參數指定也可以.

消費者同理,可以改下設定檔中zookeeper.connect=127.0.0.1:2181,也可以命令列啟動的時候修改.

5.最終就是各種宕機測試了.


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.