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

2022-07-27 21:00:43

問題描述

檢視了 「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檔案。下載頁面為: https://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,可以在此處下載:https://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?https://www.geeksforgeeks.org/how-to-install-and-run-apache-kafka-on-windows/

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

 

 

【END】