mysql增量同步kafka_Kafka Connect For MySQL 实现增量数据同步

前言

最近公司需要搭建基于 Flink 框架的实时数仓,为了保证数仓的稳定性,决定引用消息中间件 Kafka 。Kafka 的作用在于 "削峰填谷" ,所谓的“削峰填谷”就是指缓冲上下游瞬时突发流量,使其更平滑。特别是对于那种发送能力很强的上游系统,如果没有消息引擎的保护,“脆弱”的下游系统可能会直接被压垮导致全链路服务“雪崩”。但是,一旦有了消息引擎,它能够有效地对抗上游的流量冲击,真正做到将上游的“峰”填满到“谷”中,避免了流量的震荡。消息引擎系统的另一大好处在于发送方和接收方的松耦合,这也在一定程度上简化了应用的开发,减少了系统间不必要的交互。

那么问题来了,如何将源库中的全量、增量数据导入至 Kafka 主题中呢?本文章将采用 Kafka connector 的方式连接 MySQL ,来实现端到端的数据同步。

JDBC Connector

JDBC connector 允许您通过JDBC驱动程序将任何关系型数据库中的数据导入到Kafka的主题Topic中。通过使用JDBC,这个连接器可以支持各种数据库,不需要为每个数据库定制代码。

通过定期地执行SQL查询语句并为结果集中的每一行创建输出记录来加载数据。在默认情况下,在一个数据库中的所有表都会被复制,每个表都复制到自己的输出主题。数据库那些新的或删除的表被监视并自动适应调整。当从表中复制数据时,连接器可以仅仅加载新增或修改的行通过指定哪些列应当被用来发现新增或修改的数据。

测试环境

IP

操作系统

配置

服务器用途

172.21.22.186

CentOS Linux release 7.3.1611 (Core)

4vC/8Gb/400Gb

测试集群

172.21.22.187

CentOS Linux release 7.3.1611 (Core)

4vC/8Gb/400Gb

测试集群

172.21.22.188

CentOS Linux release 7.3.1611 (Core)

4vC/8Gb/400Gb

测试集群

172.21.23.238

CentOS Linux release 7.3.1611 (Core)

4vC/8Gb/400Gb

MySQL/1

前置条件

主机名

JDK

ZK

Kafka

master

jdk1.8.0_251

zookeeper-3.4.14

kafka_2.11-2.2.0

slave1

jdk1.8.0_251

zookeeper-3.4.14

kafka_2.11-2.2.0

slave2

jdk1.8.0_251

zookeeper-3.4.14

kafka_2.11-2.2.0

以下测试请在能够正常生产消费的 kafka 集群中进行

1. incrementing 自增模式

准备工作

连接 mysql 创建测试库、表

[bigdata@slave2 ~]$ mysql -h 172.21.23.238 -u root -p

[bigdata@slave2 ~]$ # 密码省略

mysql> create database test_kafka_connector;

mysql> use test_kafka_connector;

# 创建 `test_kafka_connector` 库 omneo_incrementing测试表

CREATE TABLE IF NOT EXISTS test_kafka_connector.omneo_incrementing(

pid int(11) NOT NULL AUTO_INCREMENT,

uuid varchar(100) NOT NULL,

firstname varchar(20) CHARACTER SET utf8 DEFAULT NULL,

lastname varchar(20) CHARACTER SET utf8 DEFAULT NULL,

birthdate varchar(20),

postalcode varchar(20),

city varchar(20),

sexe varchar(20),

status varchar(20),

PRIMARY KEY (pid)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 创建 `kafka_connector` 库 kafka_omneo_incrementing测试表

CREATE TABLE IF NOT EXISTS kafka_connector.kafka_omneo_incrementing(

pid int(11) NOT NULL AUTO_INCREMENT,

uuid varchar(100) NOT NULL,

firstname varchar(20) CHARACTER SET utf8 DEFAULT NULL,

lastname varchar(20) CHARACTER SET utf8 DEFAULT NULL,

birthdate varchar(20),

postalcode varchar(20),

city varchar(20),

sexe varchar(20),

status varchar(20),

PRIMARY KEY (pid)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

切换至 $KAFKA_HOME/config 目录,修改/新增 source-incrementing-mysql.properties ,内容如下:

name=mysql-a-source-omneo

connector.class=io.confluent.connect.jdbc.JdbcSourceConnector

tasks.max=1

connection.url=jdbc:mysql://172.21.23.238:3306/test_kafka_connector?user=root&password=1qaz@WSX

# incrementing 自增

mode=incrementing

# 自增字段 pid

incrementing.column.name=pid

# 白名单表 person

table.whitelist=omneo_incrementing

# topic前缀 mysql-kafka-

topic.prefix=mysql-kafka-

修改、新增 sink-incrementing-mysql.properties ,内容如下:

name=mysql-a-sink-omneo

connector.class=io.confluent.connect.jdbc.JdbcSinkConnector

tasks.max=1

#kafka的topic名称

topics=mysql-kafka-omneo_incrementing

# 配置JDBC链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值