從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