Kafka 入門(一)--安裝配置和 kafka-python 呼叫

TM0831發表於2020-07-22

一、Kafka 簡介

1.基本概念

  Kafka 是一個分散式的基於釋出/訂閱訊息系統,主要應用於大資料實時處理領域,其官網是:http://kafka.apache.org/。Kafka 是一個分散式、支援分割槽的(Partition)、多副本的(Replica),基於 ZooKeeper 協調的釋出/訂閱訊息系統。

  Kafka 有以下三個基本概念:

  • Kafka 作為一個叢集執行在一個或多個伺服器上;
  • Kafka 叢集儲存的訊息是以 Topic 為類別記錄的;
  • 每個訊息是由一個 Key,一個 Value 和時間戳構成。

2.基本架構

  Kafka 的基本架構圖如下:

  

  • Producer:生產者,就是向 Broker 發訊息的客戶端;
  • Consumer:消費者,就是從 Broker 取訊息的客戶端;
  • Consumer Group:消費者組,由多個消費者組成。組內每個消費者負責消費不同分割槽的資料,一個分割槽的資料只能由一個組內的消費者進行消費,組內消費者之間互不影響
  • Broker:一個 Kafka 伺服器就是一個 Broker,一個叢集由多個 Broker 組成;
  • Topic:主題,可以理解為佇列,生成者和消費者都是用的同一個佇列;
  • Partition:分割槽,為實現擴充套件性,一個大的 Topic 可以分散到多個 Broker 上,一個 Topic 可以分為多個 Partition;
  • Replica:副本,保證叢集中某個節點發生故障時,該節點上的資料不丟失。

 

二、Ubuntu 下安裝 Kafka

1.安裝 Java

  更新軟體包

sudo apt-get update

  安裝 openjdk-8-jdk

sudo apt-get install openjdk-8-jdk

  檢視 Java 版本,檢查是否安裝成功

   

2.安裝 ZooKeeper 

1)安裝

  下載 ZooKeeper:http://mirrors.hust.edu.cn/apache/zookeeper/

  下載好之後解壓(注意:3.5.5之後的版本應該下載檔名中帶“bin”的壓縮包),再執行如下命令:

sudo mv apache-zookeeper-3.5.8-bin /usr/local/zookeeper

cd /usr/local/zookeeper

cp conf/zoo_sample.cfg conf/zoo.cfg

  其中有一些配置引數:

  • tickTime:Zookeeper 使用的基本時間單元,預設值2000;
  • initLimit:Zookeeper 中連線同步的最大時間,預設值為10;
  • syncLimit:Zookeeper 中進行心跳檢測的最大時間,預設值為5;
  • dataDir:資料庫更新事物儲存的目錄;
  • clientPort:Zookeeper 服務監聽的埠,預設值為2181。

2)配置

  修改 /etc/profile 檔案,增加如下內容:

export ZOOKEEPER_HOME=/usr/local/zookeeper/

export PATH=$PATH:$ZOOKEEPER_HOME/bin

  更新環境變數

source /etc/profile

3)測試

  首先進入 bin 目錄,開啟服務:

  

  再啟動 CLI 連線服務:

  

3.安裝 Kafka

1)安裝

  下載 Kafka:http://kafka.apache.org/downloads

  

  下載好之後解壓,再執行如下命令:

sudo mv kafka_2.13-2.5.0/ /usr/local/kafka

cd /usr/local/kafka

2)測試

  由於前面已經啟動了 Zookeeper 服務,所以這裡只需要執行如下命令來開啟 Kafka 服務:

bin/kafka-server-start.sh config/server.properties

  通過輸出資訊可以看到 Kafka 服務已經成功開啟了,截圖如下:

  

  但這樣開啟之後是阻塞的了,我們可以在中間加一個“-daemon”即開一個守護程式來執行,則命令如下:

bin/kafka-server-start.sh -daemon config/server.properties

  建立一個主題,用一個分割槽和一個副本建立一個名為“mytopic”的主題:

bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic mytopic

  

  這樣就已經建立成功了,然後可以使用如下命令檢視主題:

bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181

  Kafka 有一個命令列服務端,它將從檔案或標準輸入中獲取輸入,並將其作為訊息傳送到 Kafka 叢集。預設情況下,每行將作為單獨的訊息傳送:

bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic mytopic

   

  同樣的,Kafka 還有一個命令列客戶端,可以從 Kafka 叢集中獲取訊息:

bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic mytopic --from-beginning

  

 

三、kafka-python 使用

1.安裝 kafka-python

pip3 install kafka-python

2.建立 Consumer

  Consumer 消費者負責從 Kafka 中獲取訊息進行處理,需要例項化 KafkaConsumer 這個類。

1 from kafka import KafkaConsumer
2 
3 
4 consumer = KafkaConsumer("test", bootstrap_servers=["localhost:9092"])
5 for msg in consumer:
6     print(msg)

3.建立 Producer

  Producer 生產者負責向 Kafka 生產和傳送訊息,需要例項化 KafkaProducer 這個類。

1 from kafka import KafkaProducer
2 
3 
4 producer = KafkaProducer(bootstrap_servers="localhost:9092")
5 for i in range(10):
6     producer.send("test", "Hello {}".format(i).encode("utf-8"))
7 producer.close()

4.執行測試

  先執行消費者程式,再執行生產者程式,消費者一直在監聽,等到生產者傳送訊息,消費者就把訊息取出,執行結果如下:

   可以看到其中每個訊息都包含了主題、分割槽、訊息內容、時間戳等資訊。

相關文章