Kafka-Connect-JDBC-Sink池連接器實戰
功能概述
通過kafka-connect,實現mysql數據自動同步,以下爲數據同步流程示意圖:
1、創建mysql數據庫
創建一個數據庫寫入用戶(sink),用於讀取數據;
使用root操作,進行如下操作
-- 創建數據庫
create database test_sink;
-- 創建只讀用戶
create user 'sink'@'127.0.0.1' identified by '123456';
-- 賦予全部權限
grant all on test_sink.* to 'sink'@'127.0.0.1';
-- 刷新權限
flush privileges;
使用sink登錄mysql,驗證是否可以正常訪問數據庫:
mysql -u sink -p -h 127.0.0.1
2、Mysql-connect-sink池端連接器配置
文件:connect-mysql-sink.properties
name=connect-mysql-sink
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
tasks.max=10
# topic名稱列表
topics=sys_config
# 配置jdbc連接
connection.url=jdbc:mysql://127.0.0.1:3306/test_sink?useUnicode=true&characterEncoding=utf8&user=sink&password=123456&serverTimezone=Asia/Shanghai
# 自動創建表
auto.create=true
# 主鍵
pk.mode=record_value
pk.fields=cfg_id
# 寫入模式
insert.mode=upsert
3、啓動connect
啓動腳本文件:8.1-kafka-connect-jdbc.bat
@echo off
rem 啓動8.1-connect-jdbc
title connect-jdbc-[%date% %time%]
rem 設置connect-jdbc路徑
set CLASSPATH=%cd%\plugins\kafka-connect-jdbc\*
rem connect 連接mysql
set configs=config/connect-standalone.properties
set configs=%configs% config/connect-mysql-whitelist-timestamp-source.properties
set configs=%configs% config/connect-mysql-sink.properties
bin\windows\connect-standalone.bat %configs%
pause
4、查看連接器插件列表
http://127.0.0.1:8083/connector-plugins
5、數據寫入測試
由於昨天已經在源庫中創建表,並寫入數據,首次連接mysql目標端庫時,發現表結構,數據已經自動同步過來,但是有如下差異:
5.1、表名稱不同:
如果源端topic.prefix配置爲:mysql-,將導致目標端自動創建的表名與源端不一致;
5.2、表結構不一致
目標庫的表結構自動創建,但是不包括默認值;
源表結構:
目標表結構:
5.3、插入、更新的數據可以正常同步
5.4、刪除的數據無法同步
但是刪除的數據,無法正常同步到目標端。
參考:
https://docs.confluent.io/5.4.0/connect/kafka-connect-jdbc/sink-connector/index.html