【Azure Developer】在Azure VM (Windows) 中搭建 kafka服務,並且通過本地以及遠程驗證 發送+消費 消息

問題描述

查看了 「How to Install and Run Apache Kafka on Windows? 」 一文後,成功安裝了Kafka服務,但是如何使用呢?如何在其他機器上連接到服務呢?如何發送消息,消費消息呢?

這些內容,文檔中都沒有介紹,所以本文主要是根據此文展示如何安裝,如何生成Topic,如何發送消息,消費消息。 以及在Azure VM中需要修改那些配置後,才能從本地或者其他機器上連接到kafka服務

 

操作步驟

第一部分:安裝和運行 Apache Kafka

參考How to Install and Run Apache Kafka on Windows一文,總的包含六個步驟,這裡我們使用一樣的步驟。

1)在Apache Kafka下載頁面,以 Binary downloads 方式下載 kafka文件。下載頁面為: //kafka.apache.org/downloads,本文下載的文件為 Scala 2.13  – kafka_2.13-3.2.0.tgz

2)解壓文件到目標文件夾中(文件夾自己選擇,如本文中使用 c:\lbtestfile\kafka)

3)進入Config目錄,修改 zookeeper.properties 文件中的 dataDir 路徑。在當前路徑的基礎上( C:/lbtestfile/kafka )加上 /zookeeper-data,這樣完整的路徑為:C:/lbtestfile/kafka/zookeeper-data

4)同樣在config文件夾中,修改 server.properties 文件中的 log.dirs 內容。同樣在當前路徑的基礎上( C:/lbtestfile/kafka )加上 /kafka-logs,這樣完整的路徑為:C:/lbtestfile/kafka/kafka-logs

5)以上操作已經完成了zookeeper和kafka服務的配置,現在打開一個CMD窗口,進入到kafka文件夾中,開始啟動zookeeper,使用的命令如下:

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

6)現在打開另一個CMD窗口,同樣進入Kafka文件夾中,啟動Kafka服務,使用命令如下:

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

注意:在執行 5,6步的時候,都需要安裝Java運行環境,所以如果VM中沒有安裝Java,可以在此處下載://www.java.com/en/download/

 

以上步驟完成後,Kafka服務已經成功啟動。。。

### 第5,6步執行動圖:

 

 

第二部分:創建Topic,發送消息,消費消息

創建Topic命令  :  .\bin\windows\kafka-topics.bat –create –topic test_topic –bootstrap-server localhost:9092

發送消息命令   :  .\bin\windows\kafka-console-producer.bat –broker-list localhost:9092 –topic test_topic

消費消息命令   : .\bin\windows\kafka-console-consumer.bat –bootstrap-server localhost:9092 –topic test_topic –from-beginning

### 演示動畫:

創建Topic命令

發送和接受消息:

 

 

第三部分:修改VM防火牆和Inbound規則,遠程訪問Kafka服務

當把第二部分中生產者(發送消息),消費者(消費消息) 中的localhost修改為VM IP地址後(xxx.xxx.140.73),就可以在其他機器中訪問Kafka服務。但在使用中,遇見了下列問題:

1)Bootstrap broker xxx.xxx.140.73:9092 (id: -1 rack: null)   和 Connection to node -1 (/xxx.xxx.140.73:9092) could not be established.

  • WARN [Producer clientId=console-producer] Bootstrap broker xxx.xxx.140.73:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
  • WARN [Producer clientId=console-producer] Connection to node -1 (/xxx.xxx.140.73:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

這是因為VM的Inbound Rule中並沒有配置打開從當前環境訪問的9092端口,所以需要找到本機的IP地址後,然後在Azure VM 門戶頁面中添加Inbound Rule. 同時,也必須在VM中,關閉Windows操作系統本身的所有防火牆。

### 在Azure VM頁面,添加VM inbound Security rule

 

 ### RDP到VM中,關閉所有防火牆配置

 

2)  Producer 和 Consumer  解析 kafka服務域名失敗

生產者解析 kafka 域名時候,解析到 127.0.0.2:9092,IP地址並不是VM的公共IP (本示例中的VM IP地址應為: xxx.xxx.140.73)

  • WARN [Producer clientId=console-producer] Connection to node 0 (xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn/127.0.0.2:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

而消費端報出的錯誤則能明確的指出,kafka域名無法解析.

  • GroupCoordinator: xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092: Failed to resolve ‘xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092’: No such host is known. (after 0ms in state CONNECT, 4 identical error(s) suppressed)

要解決以上問題,非常簡單。

  • 修改Windows Host文件(路徑為:C:\Windows\System32\drivers\etc )。在其中添加域名解析  xxx.xxx.140.73  xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn

 

經過以上兩步操作後,終於可以從其他機器中遠程訪問Kafka服務了。

 

 

參考文檔

How to Install and Run Apache Kafka on Windows?//www.geeksforgeeks.org/how-to-install-and-run-apache-kafka-on-windows/

kafka安裝及使用教程: //www.cnblogs.com/freddy-cui/p/16451164.html

 

 

【END】