Kafka Connect是一個用於Kafka與外部系統之間高可靠的、可擴展的流數據傳輸工具。它使得我們能夠簡單快速的定義數據集合在Kafka與外部系統之間輸入輸出。Kafka Connect可以從數據庫或者應用程序服務器中手機數據指標到Kafka的topic中,以便數據進行低延遲的數據處理。一個實現了導出功能的Connect可以將數據從Kafka中導出到外部存儲系統、查詢系統或者批處理系統進行離線分析。
Kafka Connect包括如下特性:
提供了一個通用的Connectors開發框架
支持分佈式模式或者單機模式
支持REST接口
自動offset管理
分佈式並且可擴展
支持流處理和批處理
Kafka Connect功能示意圖
運行Kafka Connect
支持兩種運行模式:standalone模式(單線程)和分佈式
standalone模式
standalone模式中,所有的工作都在單個線程中完成。一般情況下這種模式適合於只有單節點工作的情況,但是這並不能做到Kafka Connect的高容錯性,如果進程down掉則沒有替代的進程來完成後續的工作。那麼如何啓動一個standalone進程呢:
> bin/connect-standalone.sh config/connect-standalone.properties connector1.properties [connector2.properties ...]
connect-standalone.properties中配置了worker的相關信息,包括連接參數、系列化格式、和提交offset的時間間隔等,第二個配置文件則指定了connect的相關信息,是source還是sink,輸入的源或者輸出的目標。
分佈式模式
分佈式模式和standalone模式有點區別,我們先來看看啓動命令:
> bin/connect-distributed.sh config/connect-distributed.properties
這樣我們相當於啓動了一個Connect服務,Kafka Connect的本意就是打算以服務的方式運行,所以它提供了REST API來管理connectors,分佈式模式啓動之後,我們就可以通過REST服務進行job管理了。
現在我們來嘗試創建一個connector:
POST方式發送到:http://192.168.0.181:8083/connectors
返回:
{
"name": "local-file-source",
"config": {
"connector.class": "FileStreamSource",
"file": "test.txt",
"tasks.max": "1",
"name": "local-file-source-name",
"topic": "connect-test"
},
"tasks": [
{
"connector": "local-file-source",
"task": 0
}
],
"type": "source"
}
GET方式獲取connectors列表:
[
"local-file-source"
]
現在我們向文件中增加一行數據:
echo "nowcccsadfasdfasdfadvvc" >> test.txt
在connect-test消費端可以發現接收到了一條新紀錄:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
{"schema":{"type":"string","optional":false},"payload":"nowcccsadfasdfasdfadvvc"}
Kafka Connect的內容就講解到這裏,實際上Connector是可以直接定製的,我們可以通過繼承SourceConnector、SinkConnector、SourceTask和SinkTask來實現我們所需要的功能。
生活
豈止於美
作者:蘇鷺彬
長按二維碼關注