kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步

kettle,etl,cdc,mysql · 浏览次数 : 0

小编点评

本文介绍了如何使用Kettle的插件Debezium直接从MySQL捕获变更数据(CDC)。首先,简要介绍了CDC技术及其在MySQL中的应用。接着,详细描述了Debezium的四个主要步骤:解析MySQL二进制日志文件、解析JSON字符串、根据操作类型路由事件以及编写日志步骤以模拟后续操作。然后,展示了如何配置Debezium步骤以仅输出数据修改(DML)操作,并设置了DDL(数据定义语言)输出。最后,给出了一个示例,其中包含了创建、更新和删除操作的数据字典定义。 1. **CDC技术及Debezium概述**: 本文首先介绍了CDC的技术概念,它是一种用于捕获和同步数据库中更改的技术。接着,提出了使用Debezium直接从MySQL捕获变更数据的方案。 2. **Debezium步骤解析MySQL二进制日志**: 详细阐述了Debezium的四个主要步骤: - 解析MySQL二进制日志文件。 - 解析JSON字符串。 - 根据操作类型(如CREATE、UPDATE、DELETE等)进行路由。 - 写入日志步骤以模拟后续的操作。 3. **配置步骤**: 说明了Debezium步骤的配置方法,包括: - 设置输出为DML(数据修改)。 - 输出DDL(数据定义语言)。 - 配置其他相关属性。 4. **示例与数据字典**: 通过一个具体的示例,展示了binlog解析后的DML和DDL语句的结构。这个示例包括了创建、更新和删除操作的数据字典定义。 总的来说,本文全面地介绍了如何使用Debezium和Kettle插件来捕获和同步MySQL数据库中的变更数据,包括其配置、操作步骤以及示例。

正文

 1、之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql。

 注:CDC (Change Data Capture) 是一种技术,用于捕获和同步数据库中的更改。

1)Debezium步骤解析mysql binlog日志。

2)json input步骤解析json字符串。

3)switch-case 根据op字段进行路由。

4)create、delete、update、ddl是写日志步骤,模拟后续操作。

2、Debezium步骤配置如下(只输出dml),更多属性配置参考Debezium官网。如下图所示:

 3、switch-case配置如下,不做过多介绍。

 4、binlog解析之后的dml语句对应的json字符串结构

CREATE

{
    "ts_ms": 1718273338000,
    "db": "test",
    "table": "t1",
    "op": "CREATE",
    "after": "{\"id\":6,\"name\":\"金刚葫芦娃\",\"createtime\":1718297698000}",
    "pk": "{\"id\":6}"
}

UPDATE

{
    "ts_ms": 1718273345000,
    "db": "test",
    "table": "t1",
    "op": "UPDATE",
    "before": "{\"id\":6,\"name\":\"金刚葫芦娃\",\"createtime\":1718297698000}",
    "after": "{\"id\":6,\"name\":\"金刚葫芦娃plus\",\"createtime\":1718297698000}",
    "pk": "{\"id\":6}"
}

DELETE

{
    "ts_ms": 1718273369000,
    "db": "test",
    "table": "t1",
    "op": "DELETE",
    "before": "{\"id\":6,\"name\":\"金刚葫芦娃plus\",\"createtime\":1718297698000}",
    "pk": "{\"id\":6}"
}

 

5、Debezium步骤配置中设置ddl为true(输出dml和ddl),更多属性配置参考Debezium官网。如下图所示:

 6、binlog解析之后的ddl语句对应的json字符串结构

 

DROP TABLE
{
    "ts_ms": 1718274150072,
    "db": "test",
    "table": "t3",
    "op": "ddl",
    "sql": "DROP TABLE `test`.`t3`"
}
CREATE TABLE
 
{
    "ts_ms": 1718274165789,
    "db": "test",
    "table": "t3",
    "op": "ddl",
    "ddl_type": "CREATE",
    "sql": "CREATE TABLE `t3` (\n `id` bigint NOT NULL AUTO_INCREMENT,\n `name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,\n `createtime` datetime DEFAULT NULL,\n PRIMARY KEY (`id`)\n ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci"
}

 

 

 

与kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步相似的内容:

kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步

1、之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql。 注:CDC (Change Data Capture) 是一种技术,用于捕获和同步数据库中的更改。 1)Debezium步

kettle从入门到精通 第六十六课 ETL之kettle kettle阻塞教程,轻松获取最后一行数据,so easy

场景:ETL沟通交流群内有小伙伴反馈,如何在同步一批数据完成之后记录下同步结果呢?或者是调用后续步骤、存储过程、三方接口等。 解决:使用步骤Blocking step进行阻塞处理即可。 1、下面的demo演示从表t1同步数据至表t2(t1表中有三条数据,t2为空表,两个表表结构相同),然后数据同步完

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景: kettle中http post步骤如何发送http请求且传递body参数? 解决方案: http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口,索性用python搭建一个简单的接口,关键代码如下(安装python环境略): fro

kettle从入门到精通 第七十课 ETL之kettle kettle数据校验,脏数据清洗轻松拿捏

场景:输入在指定的错误(错误应涵盖数据类型不匹配的情况)行数内,trans不报错,但通过错误处理步骤捕捉,并记入文件,整个数据管线正常完成直至处理完最后一个输入行。 解决方案:使用步骤【数据检验】进行处理。这个步骤和常规的业务系统对接三方接口一个逻辑,将符合规则的数据放行,不符合的记录。 数据准备(

kettle从入门到精通 第六十七课 ETL之kettle 再谈kettle阻塞,阻塞多个分支的多个步骤

场景:ETL沟通交流群内有小伙伴反馈,如何多个分支处理完毕之后记录下同步结果呢?或者是调用后续步骤、存储过程、三方接口等。 解决:使用步骤Blocking step进行阻塞处理即可。 1、 如下流程图中利用Blocking step步骤同时阻塞【模拟表输出1】和【模拟表输出2】两个步骤,只有当两个步

使用Kettle定时从数据库A刷新数据到数据库B

# 一、需求背景 由于项目场景原因,需要将A库(MySQL)中的表a、表b、表c中的数据``定时T+1`` ``增量``的同步到B库(MySQL)。这里说明一下,不是数据库的主从备份,就是普通的数据同步。经过技术调研,发现Kettle挺合适的,原因如下: 1. Kettle (数据抽取、清洗、转换、

工作疑难问题解决4例

记录一下工作上疑难问题解决: 一,方便的页面监控 前几天早上,负责的kettle抽取数据表的任务又报错了,早上看手机有4个未接报警电话,一看是人员表,原来昨天报表系统有个大的查询一直未查询完成,导致truncate这个人员表,无法活动meta的锁,后续执行抽取和计算的都报错。为解决以前这个很偶发的大