概述
Kafka Connect 是一款可擴展并且可靠地在 Apache Kafka 和其他系統(tǒng)之間進(jìn)行數(shù)據(jù)傳輸?shù)墓ぞ摺?可以很簡單的快速定義 connectors 將大量數(shù)據(jù)從 Kafka 移入和移出. Kafka Connect 可以攝取數(shù)據(jù)庫數(shù)據(jù)或者收集應(yīng)用程序的 metrics 存儲到 Kafka topics,使得數(shù)據(jù)可以用于低延遲的流處理。 一個導(dǎo)出的 job 可以將來自 Kafka topic 的數(shù)據(jù)傳輸?shù)蕉壌鎯Γ糜谙到y(tǒng)查詢或者批量進(jìn)行離線分析。
Kafka Connect 功能包括:
- Kafka connectors 通用框架: - Kafka Connect 將其他數(shù)據(jù)系統(tǒng)和Kafka集成標(biāo)準(zhǔn)化,簡化了 connector 的開發(fā),部署和管理
- 分布式和單機模式 - 可以擴展成一個集中式的管理服務(wù),也可以單機方便的開發(fā),測試和生產(chǎn)環(huán)境小型的部署。
- REST 接口 - 通過易于使用的REST API提交和管理connectors到您的Kafka Connect集群
- offset 自動管理 - 只需要connectors 的一些信息,Kafka Connect 可以自動管理offset 提交的過程,因此開發(fā)人員無需擔(dān)心開發(fā)中offset提交出錯的這部分。
- 分布式的并且可擴展 - Kafka Connect 構(gòu)建在現(xiàn)有的 group 管理協(xié)議上。Kafka Connect 集群可以擴展添加更多的workers。
- 整合流處理/批處理 - 利用 Kafka 已有的功能,Kafka Connect 是一個橋接stream 和批處理系統(tǒng)理想的方式。
搭建kafka connect分布式集群
Kafka Connect 當(dāng)前支持兩種執(zhí)行方式: 單機 (單個進(jìn)程) 和 分布式.
分布式模式下會自動進(jìn)行負(fù)載均衡,允許動態(tài)的擴縮容,并提供對 active task,以及這個任務(wù)對應(yīng)的配置和offset提交記錄的容錯。
#分布式
bin/connect-distributed.sh config/connect-distributed.properties
connect-distributed.properties文件配置參數(shù)可以查看官方文檔
配置connector
Connector 配置是簡單的key-value 映射的格式。在分布式模式中,它們將被包含在創(chuàng)建(或修改)connector 的請求的JSON格式串中。
rest api
由于Kafka Connect 旨在作為服務(wù)運行,它還提供了一個用于管理 connectors 的REST API。默認(rèn)情況下,此服務(wù)在端口8083上運行。以下是當(dāng)前支持的功能:
- GET /connectors - 返回一個活動的連接器的列表
- POST /connectors - 創(chuàng)建一個新的連接器; 請求主體應(yīng)為JSON對象,其中包含name字段和帶有連接器配置參數(shù)的對象config字段
- GET /connectors/{name} - 獲取有關(guān)特定連接器的信息
- GET /connectors/{name}/config
- PUT /connectors/{name}/config - 更新連接器的參數(shù)
- GET /connectors/{name}/status - 獲取連接器的當(dāng)前狀態(tài),包括連接器是否正在運行,發(fā)生故障,已暫停等,將其分配給哪個工作器,如果連接器發(fā)生故障,則顯示錯誤信息,以及其所有任務(wù)的狀態(tài)
- GET /connectors/{name}/tasks
- GET /connectors/{name}/tasks/{taskid}/status
- PUT /connectors/{name}/pause - 暫停連接器及其任務(wù),這將停止消息處理,直到恢復(fù)連接器為止
- PUT /connectors/{name}/resume - 恢復(fù)已暫停的連接器(如果連接器未暫停,則不執(zhí)行任何操作)
- POST /connectors/{name}/restart - 重新啟動連接器(通常是因為它失敗了)
- POST /connectors/{name}/tasks/{taskId}/restart
- DELETE /connectors/{name} - 刪除連接器,暫停所有任務(wù)并刪除其配置
Kafka Connect還提供用于獲取有關(guān) connector plugin sss信息的REST API:
- GET /connector-plugins- 返回安裝在Kafka Connect集群中的連接器插件的列表。
- PUT /connector-plugins/{connector-type}/config/validate - 根據(jù)配置定義驗證提供的配置值。
自定義connector
要在Kafka和另一個系統(tǒng)之間復(fù)制數(shù)據(jù),用戶會為想要 pull 數(shù)據(jù)或者 push 數(shù)據(jù)的系統(tǒng)創(chuàng)建一個connector。 connector 有兩類:SourceConnectors 從其他系統(tǒng)導(dǎo)入數(shù)據(jù)(e.g.JDBCSourceConnector 會將關(guān)系型數(shù)據(jù)庫導(dǎo)入到Kafka中)和SinkConnectors導(dǎo)出數(shù)據(jù)(e.g. HDFSSinkConnector會將Kafka topic 的內(nèi)容導(dǎo)出到 HDFS 文件)
Connectors 自身不執(zhí)行任何數(shù)據(jù)復(fù)制:Connector的配置描述要復(fù)制的數(shù)據(jù),并且Connector 負(fù)責(zé)負(fù)責(zé)將 job 分解為可分發(fā)給 worker 的一組 Tasks。這些Tasks也分為兩類: SourceTask 和 SinkTask。
通過分配,每個Task 必須將數(shù)據(jù)的一部分子集復(fù)制到Kafka或者從Kafka復(fù)制。在 Kafka Connect中,應(yīng)該始終可以將這些分配的數(shù)據(jù)框架化為一組輸入和輸出流,這些流由具有一致結(jié)構(gòu)的記錄組成。
開發(fā)一個 connector 只需要實現(xiàn)兩個接口, Connector 和 Task接口. 一個簡單的例子的源碼在Kafkafile package中。 connector 用于單機模式,并擁有 SourceConnector 和SourceTask實現(xiàn)來讀取一個文件的每行記錄,并將其作為記錄發(fā)發(fā)送,SinkConnector的SinkTask將記錄寫入到文件。