1.區別
zookeeper - 舊版Kafka的參數
bootstrap.server - 新版Kafka的參數
2.原因
Kafka開發團隊重寫了ZooKeeper的Quorum控制器代碼並嵌入到Kafka中。所以從v2.8版本開始,Kafka不再依賴ZooKeeper
資料:https://weibo.com/ttarticle/p/show?id=2309404634263655153710
3.特性
bootstrap.servers參數,只在啟動客戶端連接Kafka服務時使用。並且,即使列表里面填了多個節點,只要有一個可用就行了。
4.實例
假定有3台機,主機名是node1、node2、node3,以創建一個topic為例:
舊版(< v2.2)
kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --create --topic ..
新版(>= v2.2)
kafka-topics.sh --bootstrap-server node1:9092 --create --topic ..
其中,2181是ZooKeeper的監聽端口,9092是Kafka的監聽端口。
舊版用--zookeeper參數,主機名(或IP)和端口用ZooKeeper的,也就是server.properties文件中zookeeper.connect屬性的配置值
新舊用--bootstrap-server參數,主機名(或IP)和端口用某個節點的即可,即主機名(或主機IP):9092。
5.錯誤及解決方法
* 如果沒有使用對應版本的命令,會報以下2種錯誤:
(1) 找不到zookeeper參數
zookeeper is not a recognized option
新版已不支持zookeeper參數,需要換成bootstrap-server參數
(2) 節點響應超時(請求超時)
Error while executing topic command : Timed out waiting for a node assignment. Call: xxx ERROR org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: xxx
該錯誤是由於沒有用對應版本的命令,訪問了錯的主機名(或IP)和端口,所以請求失敗導致超時。
* 其中的xxx是指具體的動作,例如createTopics、listTopics等。
另外,如果沒配置server.properties文件的listeners值,也會報以上錯誤。
listeners值默認是PLAINTEXT://:9092,要改為PLAINTEXT://localhost:9092或PLAINTEXT://node1:9092等
附:參考資料
https://blog.csdn.net/zollty/article/details/108975026
https://www.aboutyun.com/thread-27567-1-1.html