第四課作業(yè)kafka:
kafka在zookeeper默認(rèn)使用/為根目錄,試將/更換為/kafka。具體可參考kafka文檔說明
http://kafka.apache.org/082/documentation.html#brokerconfigs
示例配置
hostname1:port1,hostname2:port2,hostname3:port3/chroot/path
作業(yè)要求,將根目錄由/換為/kafka并搭建集群(VM和docker均可),并使用kafka-console-consumer.sh訂閱消息,使用第3節(jié)課中的示例producer代碼向集群中發(fā)送數(shù)據(jù)。請(qǐng)將zookeeper中的目錄結(jié)構(gòu),kafka-console-consumer.sh訂閱到的消息截圖。同時(shí)說明使用/kafka為根目錄后,producer和consumer的使用注意事項(xiàng)
============================================
1.三臺(tái)節(jié)點(diǎn)ZK: NIE-00:2181,NIE-01:2181,NIE-02:2181

Zk起來后NIE-01是leader,其他兩個(gè)是follower;
2.登錄zkClient,創(chuàng)建/kafka目錄
登錄NIE-00節(jié)點(diǎn)的,執(zhí)行bin/zkCli.sh 查看zk數(shù)據(jù):



使用create /kafka “” 創(chuàng)建目錄節(jié)點(diǎn) /kafka, 并在其他節(jié)點(diǎn)上也驗(yàn)證:
NIE-01:

NIE-02:

3.在kafka配置文件server.properties中修改配置:zookeeper.connect配置如下:
注意:只需要在最后一個(gè)后面加上目錄即可。

- 修改完配置后啟動(dòng)kafka-server:

5.在NIE-00上創(chuàng)建topic; 在NIE-01啟動(dòng)consumer;然后再NIE-02上啟動(dòng)producer 發(fā)消息,查看是否能夠正常收發(fā):
- 創(chuàng)建topic:
bin/kafka-topics.sh --create --zookeeper NIE-00:2181,NIE-01:2181,NIE-02:2181/kafka --topic topic_zk_kafka --replication-factor 2 --partitions 3
- 啟動(dòng)console-consumer等待消費(fèi):
bin/kafka-console-consumer.sh --zookeeper NIE-00:2181,NIE-01:2181,NIE-02:2181/kafka --topic topic_zk_kafka --from-beginning
- 啟動(dòng)console-producer發(fā)送消息:
bin/kafka-console-producer.sh --broker-list NIE-00:9092,NIE-01:9092,NIE-02:9092 --topic topic_zk_kafka

總結(jié):使用自定義在zookeeper創(chuàng)建的目錄/kafka注意事項(xiàng):
(1). kafka配置config/server.properties時(shí):zookeeper.connect=NIE-00:2181,NIE-01:2181,NIE-02:2181/kafka
注:只有最后加一個(gè)目錄即可;
(2). 消費(fèi)端消費(fèi)消息時(shí),需要注意,--zookeeper NIE-00:2181,NIE-01:2181,NIE-02:2181/kafka
這里跟kafka server.properties中的connect配置時(shí)一致的。
(3). 生產(chǎn)者生產(chǎn)消息時(shí),指定的broker-list 不用指定zk中創(chuàng)建的目錄。
疑問::-- producer難道不使用zk么?不是說producer也是要靠zk的leader寫消息的么?為什么不用知道zk的目錄呢?
1.驗(yàn)證zk給kafka創(chuàng)建出的節(jié)點(diǎn)和目錄:


2.驗(yàn)證zk中的topic:確實(shí)存有我剛創(chuàng)建的topic

<embed src="" width=300 height=45 type=audio/mpeg loop="-1" autostart="false" volume="0"></embed>