Apache Kafka 是什麼?
Kafka 是一個開源的分散式流處理平臺,其簡化了不同資料系統的整合。流指的是一個資料管道,應用能夠通過流不斷地接收資料。Kafka 作為流處理系統主要有兩個用處:
- 資料整合: Kafka 捕捉事件流或資料變化流,並將這些資料送給其它資料系統,如關係型資料庫,鍵值對資料庫或者資料倉儲。
- 流處理:Kafka接收事件流並儲存在一個只能追加的佇列裡,該佇列稱為日誌(log)。日誌裡的資訊是不可變的,因此支援連續實時的資料處理和流轉換,並使結果在系統級別可訪問。
相比於其它技術,Kafka 擁有更高的吞吐量,內建分割槽,副本和容錯率。這些使得 Kafka 成為大規模訊息處理應用的良好解決方案。
Kafka 系統有三個主要的部分:
- 生產者(Producer): 產生原始資料的服務。
- 中間人(Broker): Kafka 是生產者和消費者之間的中間人,它使用API來獲取和釋出資料。
- 消費者(Consumer): 使用中間人釋出的資料的服務。
安裝 Kafka
見 Kafka 簡單實驗一
配置環境
我們的專案將包括:
生產者:將字串傳送給 Kafka 消費者: 獲取資料並展示在終端視窗中 Kafka: 作為中間人
安裝需要的依賴包
pip install kafka-python
建立生產者
生產者是給 Kafka 中間人傳送訊息的服務。值得注意的是,生產者並不關注最終消費或載入資料的消費者。 建立生產者: 建立一個 producer.py 檔案並新增如下程式碼:
import time from kafka import SimpleProducer, KafkaClient # connect to Kafka kafka = KafkaClient('localhost:9092') producer = SimpleProducer(kafka) # Assign a topic topic = 'my-topic'
建立訊息:
迴圈生成1到100之間的數字
傳送訊息:
Kafka 訊息是二進位制字串格式(byte)
以下是完整的生產者程式碼:
import time from kafka import SimpleProducer, KafkaClient # connect to Kafka kafka = KafkaClient('localhost:9092') producer = SimpleProducer(kafka) # Assign a topic topic = 'my-topic' def test(): print('begin') n = 1 while (n<=100): producer.send_messages(topic, str(n)) print "send" + str(n) n += 1 time.sleep(0.5) print('done') if __name__ == '__main__': test()
建立消費者
消費者監聽並消費來自 Kafka 中間人的訊息。我們的消費者應該監聽 my-topic 主題的訊息並將訊息展示。
以下是消費者程式碼(consumer.py):
from kafka import KafkaConsumer #connect to Kafka server and pass the topic we want to consume consumer = KafkaConsumer('my-topic') print "begin" for msg in consumer: print msg
執行專案
確保 Kafka 在執行
開啟兩個終端,在第一個終端中執行消費者:
$ python consumer.py
在第二個終端執行生產者:
$ python producer.py