這裏前提條件是已經部署安裝了一個kafka連接器。我之前寫過一篇關於 kafka-connect-oracle 連接器例子部署的博客:連接器部署 最後編譯執行得到了一個jar包,放在指定路徑,然後這篇博客總結一下如何啓動一個kafka連接器。(這個方法不僅只適用此連連接器)
1、啓動Zookeeper與Kafka
這裏需要用到kafka中的topic,所以現在kafka中創建student的主題: kafka常用指令
kafka-topics --zookeeper 192.168.129.228:2181/kafka --create -replication-factor 1 --partitions 3 --topic student
2、產生jar包複製到指定路徑
之前編譯執行產生的 kafka-connect-oracle-1.0.jar 和其驅動程序 ojdbc7.jar 複製到一個指定的路徑下: /root/kafka---oracle
並且將配置文件導入到服務器的 **/opt/cloudera/parcels/KAFKA/etc/kafka/conf.dist 路徑下,其中再找到 connect-distributed.properties 文件並修改其中的plugin.path: plugin.path=/root/kafka---oracle
注意: 也建議一些連接器,轉換器的所需的jar包可以放在這裏指定路徑。
3、修改連接器的配置信息
我們先看之前那個項目給我們的樣例 OracleSourceConnector.properties 配置信息:
name=oracle-logminer-connector
connector.class=com.ecer.kafka.connect.oracle.OracleSourceConnector
db.name.alias=orcl
tasks.max=1
topic=student
db.name=orcl
db.hostname=192.168.129.156
db.port=1521
db.user=kafka
db.user.password=kafkapass
db.fetch.size=1
parse.dml.data=true
reset.offset=false
multitenant=false
table.whitelist=KAFKA.student
table.blacklist=
start.scn=
這裏我們需要先看一下官方的開發文檔: 開發文檔 其中提到————>>
REST API不僅供用戶用來監視/管理Kafka Connect。它也用於Kafka Connect跨集羣通信。在跟隨者節點REST API上收到的請求將轉發到領導者節點REST API。在情況下,URI下被給予宿主可達是從它偵聽的URI,配置選項不同rest.advertised.host.name,rest.advertised.port並rest.advertised.listener 可以用來改變將由跟隨節點使用與前導連接URI。當同時使用HTTP和HTTPS偵聽器時,該rest.advertised.listener選項還可用於定義哪個偵聽器將用於跨集羣通信。當使用HTTPS在節點之間進行通信時,將使用相同ssl.*或listeners.https選項來配置HTTPS客戶端。
以下是當前支持的REST API端點:
GET /connectors | 返回活動連接器的列表 |
POST /connectors | 創建一個新的連接器;請求主體應爲JSON對象,其中包含字符串name字段和config帶有連接器配置參數的對象字段 |
GET /connectors/{name} | 獲取有關特定連接器的信息 |
GET /connectors/{name}/config | 獲取特定連接器的配置參數 |
PUT /connectors/{name}/config | 更新特定連接器的配置參數 |
GET /connectors/{name}/status | 獲取連接器的當前狀態,包括連接器正在運行,發生故障,已暫停等情況 |
GET /connectors/{name}/tasks | 獲取連接器當前正在運行的任務列表 |
GET /connectors/{name}/tasks/{taskid}/status | 獲取任務的當前狀態,包括它是否正在運行,失敗 |
PUT /connectors/{name}/pause | 暫停連接器及其任務,這將停止消息處理,直到恢復連接器爲止 |
PUT /connectors/{name}/resume | 恢復已暫停的連接器(如果連接器未暫停,則不執行任何操作) |
POST /connectors/{name}/restart | 重新啓動連接器(通常是因爲它失敗了) |
POST /connectors/{name}/tasks/{taskId}/restart | 重新啓動單個任務(通常是因爲它失敗了) |
DELETE /connectors/{name} | 刪除連接器,暫停所有任務並刪除其配置 |
GET /connectors/{name}/topics | 獲取自創建連接器以來或自發出重置其活動主題集的請求以來特定連接器正在使用的主題集 |
PUT /connectors/{name}/topics/reset | 發送請求以清空連接器的活動主題集 |
通過第二行的 POST /connectors 得知我們要講這個配置文件轉換爲json格式,後面我們也通過這個指令啓動連接器,如下:
OracleSourceConnector.json 文件:
{
"name":"oracle-logminer-connector",
"config":{
"connector.class":"com.ecer.kafka.connect.oracle.OracleSourceConnector",
"db.name.alias":"orcl",
"tasks.max":"1",
"topic":"student",
"db.name":"orcl",
"db.hostname":"192.168.129.156",
"db.port":"1521",
"db.user":"kafka",
"db.user.password":"kafkapass",
"db.fetch.size":"1",
"parse.dml.data":"true",
"reset.offset":"false",
"multitenant":"false",
"table.whitelist":"KAFKA.student",
"table.blacklist":"",
"start.scn":""
}
}
4、啓動Kafka連接器
cd /opt/cloudera/parcels/KAFKA
./lib/kafka/bin/connect-distributed.sh -daemon etc/kafka/conf.dist/connect-distributed-Oracle.properties
可能會報錯:
…………
log4j:ERROR Could not read configuration file from URL [file:./lib/kafka/bin/../config/connect-log4j.properties].
java.io.FileNotFoundException: ./lib/kafka/bin/../config/connect-log4j.properties (No such file or directory)
…………
解決辦法在此博客: https://blog.csdn.net/JJBOOM425/article/details/106126914
5. 啓動之前部署的連接器
(1)使用上面創建好的json配置文件: OracleSourceConnector.json
(2)啓動 test-connector 監視MySQL數據庫 :
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://192.168.129.228:8083/connectors/ -d @./etc/kafka/conf.dist/OracleSourceConnector.json
(3)如果啓動成功,則可以查看創建的connector列表:
curl -X GET http://192.168.129.228:8083/connectors
常用指令拓展:
A、查看創建的connector列表
curl -X GET http://192.168.129.228:8083/connectors
B、查看創建的connector狀態
curl -X GET http://192.168.129.228:8083/connectors/oracle-logminer-connector/status
C、查看創建的connector配置
curl -X GET http://192.168.129.228:8083/connectors/oracle-logminer-connector/config
D、刪除connector
curl -X DELETE http://192.168.129.228:8083/connectors/oracle-logminer-connector
6、問題解決
注意這裏我查看了創建的connector的狀態,其中報了錯,說找不到驅動程序。
這個解決辦法也很簡單,我看了在connect-distributed.properties的plugin.path路徑,在此路徑下面新建一個文件夾,然後把jar包放進去就可以了。
然後再重新執行,再看狀態就可以發現成功執行了。