一、搭建Zookeeper集羣
二、kafka broker集羣搭建
-
kafka 下載、解壓
wget http://apache.opencas.org/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz tar -xzf kafka_2.11-0.9.0.0.tgz
-
kafka broker配置文件修改
修改kafka根目錄下的config/server.propertiesbroker.id=0 #整個集羣內唯一id號,整數,一般從0開始 listeners=PLAINTEXT://192.168.6.56:9092 #協議、當前broker機器ip、端口,此值可以配置多個,應該跟SSL等有關係,更多用法尚未弄懂,這裏修改爲ip和端口。 port=9092 #broker端口 host.name=192.168.6.56 #broker 機器ip log.dirs=/zyxx_data/kafka-logs/kafka00 #kafka存儲數據的目錄 zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 #zookeeper 集羣列表
-
kafka broker多節點配置
kafka多節點配置,可以像zookeeper一樣把軟件目錄copy多份,修改各自的配置文件。這裏介紹另外一種方式:同一個軟件目錄程序,但使用不同的配置文件啓動
使用不同的配置文件啓動多個broker節點,這種方式只適合一臺機器下的僞集羣搭建,在多臺機器的真正集羣就沒有意義了
-
把kafka根目錄下的config/server.properties copy兩份,名稱分別修改爲:server-1.properties 、server-2.properties。各自修改他們的配置如下:
config/server-1.properties
broker.id=1 listeners=PLAINTEXT://192.168.6.56:9093 port=9093 host.name=192.168.6.56 log.dirs=/zyxx_data/kafka-logs/kafka01 zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183
config/server-2.properties
broker.id=2 listeners=PLAINTEXT://192.168.6.56:9094 port=9094 host.name=192.168.6.56 log.dirs=/zyxx_data/kafka-logs/kafka02 zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183
集羣啓動
-
zookeeper集羣啓動
進入到/var/zookeeper/目錄,執行
zookeeper00/bin/zkServer.sh start zookeeper01/bin/zkServer.sh start zookeeper02/bin/zkServer.sh start
我們可以通過以下命令查看zookeeper是否已啓動
ps -ef | grep zoo.cfg
查看zookeeper進程信息 -
kafka 集羣啓動
進入到kafka目錄,執行
bin/kafka-server-start.sh -daemon config/server.properties bin/kafka-server-start.sh -daemon config/server-1.properties bin/kafka-server-start.sh -daemon config/server-2.properties
"-daemon" 參數代表以守護進程的方式啓動kafka server。
官網及網上大多給的啓動命令是沒有"-daemon"參數,如:“bin/kafka-server-start.sh config/server.properties &”,但是這種方式啓動後,如果用戶退出的ssh連接,進程就有可能結束,具體不清楚爲什麼。我們可以通過以下命令查看kafka server是否已啓動
ps -ef | grep config/server
查看kafka server進程信息
測試
爲了簡單起見,這裏通過命令行的方式啓動生產者和消費者進行測試。
-
創建主題
進入到kafka目錄,創建“test5”topic主題:分區爲3、備份爲3的
bin/kafka-topics.sh --create --zookeeper 192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 --replication-factor 3 --partitions 3 --topic test5
--zookeeper : zookeeper集羣列表,用英文逗號分隔。可以不用指定zookeeper整個集羣內的節點列表,只指定某個或某幾個zookeeper節點列表也是你可以的
replication-factor : 複製數目,提供failover機制;1代表只在一個broker上有數據記錄,一般值都大於1,代表一份數據會自動同步到其他的多個broker,防止某個broker宕機後數據丟失。
partitions : 一個topic可以被切分成多個partitions,一個消費者可以消費多個partitions,但一個partitions只能被一個消費者消費,所以增加partitions可以增加消費者的吞吐量。kafka只保證一個partitions內的消息是有序的,多個一個partitions之間的數據是無序的。查看"test5"主題詳情
bin/kafka-topics.sh --describe --zookeeper 192.168.6.56:2181 --topic test5
test5 topic詳情 -
啓動生產者、消費者
啓動生產者
bin/kafka-console-producer.sh --broker-list 192.168.6.56:9092 --topic test5
--broker-list : 值可以爲broker集羣中的一個或多個節點
啓動消費者(在新的ssh連接窗口)
bin/kafka-console-consumer.sh --zookeeper 192.168.6.56:2181 --topic test5 --from-beginning
--zookeeper : 值可以爲zookeeper集羣中的一個或多個節點
我們可以發現,在生產者下輸入一個消息,回車後可以在消費者下輸出,說明我們集羣搭建的沒問題
生產者和消費者
-
模擬kafka broker集羣某個節點宕機
我們直接通過kill 進程來模擬
再觀察 生產者和消費者
某個broker節點宕機後的生產者消費者我們可以發現,消費者出現了警告信息,但是依舊可以消費數據。
-
模擬zookeeper集羣某個節點宕機
我們直接通過kill 進程來模擬
再觀察 生產者和消費者
某個zookeeper節點宕機後的生產者和消費我們可以發現,消費者依舊可以消費數據。
這就說明我們整個集羣環境的搭建已經成功。注意一點,你啓動消費者時在命令中只指定了一個zookeeper節點,且模擬zookeeper某個節點宕機時,你kill掉的正好又是這個節點。這種情況下你的消費者會不停的報警告信息,但是不影響消費信息。