[ Big data ] Apache Kafka Message Broker 使用教學

在做工業 4.0 或是物聯網的解決方式案中,使用情境上常會需要蒐集多個產線或是多個場域內的感應器(Sensor)資料,因此需要有一個訊息接受器(Broker)用來處理接收不同通道的訊息。

本篇主要和大家分享如何使用 Apache 生態系中開源的 Kafka 訊息系統。

Apache Kafka

Kafka 介紹

Kafka 起源是由 Linkedin 的專業人士社群網站所開發,主要提供分散式的messaging system ,於 2011 年初開源。現在已被多家不同類型的公司,作為多種類型的數據管道和訊息系統使用。目標是為處理即時數據提供一個統一、高通量、低等待的平台。

Kafka 系統架構

Kafka 利用 Topic 將不同的訊息做出分類,每個 Topic 內又可以區分為多個 Partition,Kafka 系統服務主要角色如下:

  • Broker : Kafka 採用叢集的架構,由一至多台的機器所組成,而叢集內每一台機器被稱之為一個 Kafka 的 Broker。
  • Topic : 放訊息類別的通道(Queue)。
  • Partition : 每一個 Topic 內可以切分成多個 Partition。
  • Producer : 負責發布消息到 Kafka Topic 的角色。
  • Consumer : 負責接收/訂閱 Kafka Topic 內的訊息做處理。
  • Zookeeper:每個 Broker 中的訊息同步及叢集資源配置是透過 Zookeeper 來達成。

簡單的系統架構圖如下所示:

另外可透過下圖,解釋使用情境上 Kafka 的運作方式 ,可以同時有多個 Producer(包含:系統日誌、感應器資料、交易訊息等) 持續傳送訊息至 Broker,而 Kafka 支持平行擴展,因此叢集內 Broker 數量越多,可以接收的訊息越多,而 Kafka 叢集也會統一將資料 Push 至 Zookeeper 服務,由 Zookeeper 來負責處理叢集資源的分配、訊息同步以及 Consumer 端發生變化時,平衡目前 Broker 的配置。

Consumer 端可以將這些在 Broker topic 內的訊息給接收下來,後續可做串流分析或是資料儲存皆可,至於訊息的取得方式可以直接透過 Kafka API 從想要的 Broker 中取得訊息,也可透過 Zookeeper 去取得訊息。

接下來我們透過 Hortonworks 平台所包好的 Sandbox,快速安裝好 Kafka 服務。 如有使用者是採用 Cloudera 平台也是一樣的方式去作安裝。

Kafka 安裝

首先大家可以參考之前的文章 Hortonworks Sandbox 安裝,安裝完成後可以透過 Ambari 網頁畫面開啟 Kafka 服務。

登入 Ambari 後可以選擇啟動 Kafka 服務。

Kafka 操作指令

啟動 Kafka 服務後,需要使用 SSH 登入到服務安裝的 Server,接著我們可以使用指令來做測試,相關指令如下所示:(指令 hdp 路徑需要依照您安裝的版本去做調整)

1.建立 Topic,名稱為 queue_test

/usr/hdp/2.4.0.0-169/kafka/bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic queue_test

2.列出目前 Topic 清單

/usr/hdp/2.4.0.0-169/kafka/bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181

3.刪除名稱為 queue_test 的 Topic

/usr/hdp/2.4.0.0-169/kafka/bin/kafka-topics.sh --delete --zookeeper 127.0.0.1:2181 --topic queue_test

4.模擬為 Producer 傳送資料至 queue_test Topic

/usr/hdp/2.4.0.0-169/kafka/bin/kafka-console-producer.sh --broker-list 127.0.0.1:2181 --topic queue_test

5.從 queue_test Topic 中接受訊息

/usr/hdp/2.4.0.0-169/kafka/bin/kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --topic queue_test --from-beginning

Ben Shiue

Having being a full stack engineer. His interests in Node.js, ARM mbed, IoT solutions. Contact us : [email protected]

ALL RIGHTS RESERVED. COPYRIGHT © 2016. Designed and Coded by Makee.io