windows下kafka安裝啓動以及使用

Zookeeper

kafka用到了zookeeper,現在的kafka會自帶zookeeper,如果我們要自己安裝的話 也可以

zookeeper的下載地址爲:https://zookeeper.apache.org/releases.html#download

下載成功之後解壓,j進入bin目錄,然後通過下面的命令啓動zookeeper.

zkServer.cmd

在zookeeper使用時,可能會遇到一些錯誤,關於這些錯誤的問題可以參考博主的這篇博客:zookeeper安裝啓動的一些問題

Kafka

然後我們需要需要下載kafka,kafka的下載地址爲:http://kafka.apache.org/downloads

解壓並進入Kafka目錄,筆者:D:\Kafka\kafka_2.12-0.11.0.0

 進入config目錄找到文件server.properties並打開

找到並編輯zookeeper.connect=localhost:2181

Kafka會按照默認,在9092端口上運行,並連接zookeeper的默認端口:2181

 進入Kafka安裝目錄D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

bin\windows\kafka-server-start.bat config\server.properties

kafka有自帶的zookeeper,啓動自帶的zookeeper可以通過如下命令:

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

如果在執行該命令時報錯:

The syntax of the command is incorrect.

則有可能是kafka安裝路徑中的橫槓導致的,這時候我們將kafka拷貝到一個沒有橫槓的路徑下即可。參考:https://stackoverflow.com/questions/20105735/error-the-syntax-of-the-command-is-incorrect-when-renaming-a-file

如果安裝沒有問題了,使用命令啓動單點集羣的kafka時,報錯:

 Connection to node 0 (host.docker.internal/10.130.228.45:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient

博主解決的辦法是打開,在kafka安裝路徑下的config/server.properties文件中,修改下面的配置爲:

listeners=PLAINTEXT://localhost:9092  

參考:https://stackoverflow.com/questions/47677549/kafka-zookeeper-connection-to-node-1-could-not-be-established-broker-may-no

創建一個topic

命令爲:

bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

測試該topic是否創建成功:

bin\windows\kafka-topics.sh --list --bootstrap-server localhost:9092

發送message

> bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
This is a message
This is another message

接收message

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

啓動kafka集羣

在本地拷貝兩個server.properties

> copy config\server.properties config\server-1.properties
> copy config\server.properties config/server-2.properties

更改下面的參數

config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://XXX:9093
    log.dirs=/tmp/kafka-logs-1
 
config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://XXX:9094
    log.dirs=/tmp/kafka-logs-2

broker.id屬性是集羣中每個節點的唯一且永久的名稱。 我們只需要覆蓋端口和日誌目錄,這是因爲我們都在同一臺計算機上運行它們,並且希望所有代理都不要試圖在同一端口上註冊或覆蓋彼此的數據。

我們有Zookeeper並啓動了單個節點,因此我們只需要啓動兩個新節點:

> bin\kafka-server-start.bat config\server-1.properties 
...
> bin\kafka-server-start.bat config\server-2.properties
...

現在,創建一個具有三個複製factor的新topic:

bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic

好的,但是現在有了集羣,我們如何知道哪個broker在做什麼?我們需要運行“describe topics”命令:

bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic: my-replicated-topic      PartitionCount: 1       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: my-replicated-topic      Partition: 0    Leader: 2       Replicas: 2,1,0 Isr: 2,1,0

 第一行給出了所有分區的摘要,每一行都給出了有關一個分區的信息。 由於該主題只有一個分區,因此只有一行。

  • “leader”是負責給定分區的所有讀取和寫入的節點。 每個節點將成爲分區的隨機選擇部分的領導者。
  • “replics”是爲該分區複製日誌的節點列表,無論它們是引導者還是當前處於活動狀態。
  • “ isr”是“同步”副本的集合。 這是副本列表的子集,當前仍處於活動狀態並追隨領導者。

請注意,在我的示例中,節點2是topic唯一分區的leader。我們可以在創建的之前的topic 上運行相同的命令,以查看其信息

kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic test
Topic: test     PartitionCount: 1       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0

因此,如我們期待的一樣-之前的topic沒有replicas 副本,並且位於服務器0上,這是我們創建羣集時集羣中唯一的服務器。

讓我們向我們的新topic發佈一些消息:

kafka-console-producer.bat --bootstrap-server localhost:9092 --topic my-replicated-topic
>my test message 1
>my test message 2
>Terminate batch job (Y/N)? Y

然後consume這些message

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my-replicated-topic --from-beginning
my test message 1
my test message 2
Processed a total of 2 messages
Terminate batch job (Y/N)? Y

現在讓我們測試一下容錯能力。 broker 2扮演的是leader的角色,所以讓我們kill它:

wmic process where "caption = 'java.exe' and commandline like '%server-2.properties%'" get processid
ProcessId
8760


C:\Users\tools\kafka>taskkill /pid 8760 /f
SUCCESS: The process with PID 8760 has been terminated.

在kill之後,leader自動變爲了server 1

kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic: my-replicated-topic      PartitionCount: 1       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: my-replicated-topic      Partition: 0    Leader: 1       Replicas: 2,1,0 Isr: 1,0

但是,即使最初進行寫操作的leader已經down掉了,message仍然可供使用:

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my-replicated-topic --from-beginning
my test message 1
my test message 2

原因在於,我們設置了備份。

 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章