Debezium source 連接 MongoDB 集羣與 Kafka

從flink社區看到 MongoDB -> Debezium -> Kafka 作爲 Flink datasource 的方案,試着搭了一套。

MongoDB 使用副本+分片

Debezium 作爲 Kafka Connect 的插件,首先配置 Kafka Connect,選擇的是 connect-distribute 模式,這裏踩到了一個坑, 因爲我的集羣 java 版本還在 7,所以 Kafka Connect load 不到插件, 要升級到 java8 。

如果要用於生產, Kafka Connect 需要的 3 個 topic( offsets, configs, status ) 需要認真配置 partition 和 replication。Kafka 集羣如果有認證, 需要在 connect-distribute.properties 中也配置認證三兄弟( sasl.jaas.config, sasl.mechanism, security.protocol )

Kafka Connect 在分佈式模式下,使用REST API交互,所以需要爲 Debezium 插件準備一個 json 格式的配置文件

vi debe-connect.json

{
  "name": "test-connector",
  "config": {
    "connector.class": "io.debezium.connector.mongodb.MongoDbConnector",
    "mongodb.hosts": "configs/mongos1:mongos-port,configs/mongos2:mongos-port,configs/mongos3:mongos-port",
    "tasks.max" : "1",
    "mongodb.name": "mongo-test",
    "mongodb.user": "root",
    "mongodb.password": "123456",
    "collection.whitelist": "databaseName.collectionName",
    "connect.max.attempts": "12"
  }
}

name: connector 任務的名字,需要唯一

mongodb.hosts: configs 位置是副本集配置的名字

collection.whitelist: 指定監控的 collection 可以爲單個,也可以使用正則匹配多個。對應的還有 database.whitelist/blacklist 具體閱讀官網吧

mongodb.name: 字面意思,按照我的配置最終 Kafka 內 topic 名字會是 mongo-test.databaseName.collectionName

有認證的 MongoDB 需要配置用戶名密碼

提交 connector 命令

curl -i -X POST -H "Content-type:application/json" -H "Accept:application/json" -d @路徑/debe-connector.json http://localhost:8083/connectors

查看已提交 connector 命令

curl http://localhost:8083/connectors

刪除已提交 connector 命令

curl -i -X DELETE http://localhost:8083/connectors/connectorName

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章