我剛學kafka的時候,對這幾個概念有時候會混淆,尤爲是配置的時候常常搞不清楚它們的區別。這篇文章打算作一個梳理。shell
broker指的是kafka的服務端,能夠是一個服務器也能夠是一個集羣。producer和consumer都至關於這個服務端的客戶端。bootstrap
broker-list指定集羣中的一個或者多個服務器,通常咱們再使用console producer的時候,這個參數是必備參數,另一個必備的參數是topic,以下示例:windows
C:\kafka\kafka_2.12-1.1.1 λ .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test20190713 >this is a test >
本地主機若是要模擬多個broker,方法是複製多個server.properties,而後修改裏面的端口, broker.id等配置模擬多個broker集羣。服務器
好比模擬三個broker的狀況,首先把config 目錄下的 server.properties 複製兩份,分別命名爲 server-1.properties 和 server-2.properties,而後修改這兩個文件的下列屬性,ide
server-1.properties:測試
broker.id=1 listeners=PLAINTEXT://:9093 log.dirs=C:/kafka/broker1
server-2.properties:this
broker.id=2 listeners=PLAINTEXT://:9094 log.dirs=C:/kafka/broker2
broker.id 用來惟一標識每個 broker,每一個broker都有一個惟一的id值用來區分彼此。Kafka在啓動時會在zookeeper中/brokers/ids路徑下建立一個與當前broker的id爲名稱的虛節點,Kafka的健康狀態檢查就依賴於此節點。spa
咱們能夠打開一個zk的客戶端,經過ls命令來查看下這個路徑下的內容:code
λ .\bin\windows\zookeeper-shell.bat localhost:2181 Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is disabled ls WATCHER:: WatchedEvent state:SyncConnected type:None path:null ls /brokers/ids [0]
能夠看到咱們默認啓動的這個broker.id爲0的節點。server
bootstrap-servers指的是目標集羣的服務器地址,這個和broker-list功能是同樣的,只不過咱們在console producer要求用後者。
之前咱們使用console consumer測試消息收發時會這樣寫:
C:\kafka\kafka_2.12-1.1.1 λ .\bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic test20190713 Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
這樣能夠接收到生產者控制檯發送的消息。
如今咱們也能夠這樣寫,
C:\kafka\kafka_2.12-1.1.1 λ .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test20190713
你能夠本身測試下,也是能夠收到消息的。
前者是老版本的用法,0.8之前的kafka,消費的進度(offset)是寫在zk中的,因此consumer須要知道zk的地址。後來的版本都統一由broker管理,因此就用bootstrap-server了。
bootstrap-server還能夠自動發現其它的broker。
歡迎你們關注個人公衆號