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