Kafka(六)利用Kafka Connect+Debezium通过CDC方式将Oracle数据库的数据同步至PostgreSQL中

文章目录

  • 背景
  • 解决方案
    • 场景一
    • 场景二
    • 场景三
  • CDC-Change Data Capture如何解决上述问题
    • CDC工作原理
    • Kafka Connect 和 Debezium简单介绍
  • 场景二的例子,将Oracle数据库的数据通过CDC方式同步至PostgrSQL中
    • 使用Debezium时遇到问题的排查思路
  • 场景一和场景三的实现思路
  • ETL(Extract, Transform, and Load)和Flink CDC
  • 写在最后
  • 参考资料

背景

平时一些业务场景可能需要我们在多个系统之间进行业务同步,典型的场景有如下几种

  1. 将数据表同步至ElasticSearch以提高搜索速度。
  2. 同一张表的数据需要在多个数据库之间进行同步。多个数据库可能是同一种数据库,也可能是本文中的例子一样,是不同数据库之间进行同步
  3. 在同一个数据库中不同的表进行同步。例如表A中新增数据时,我们也需要在表B中进行一些数据操作

上述3个场景的共同要求基本都是,当数据源有新数据时,我们希望马上同步到目标,尽量减少延迟;在同步期间尽量减少对数据源的影响。

解决方案

场景一

对于场景一,我们可以使用的解决方案是Logstash的Jdbc插件。该插件的基本原理是,通过SQL和定期查询,获得新数据之后,送到ES中。但这种解决方案会存在一定的延时,并且如果没新增数据,频繁查询是没必要的。

如果数据库是MySQL,也可以选择阿里的cannal,这样解决了上述问题。现实情况可能是,我们在用PostgreSQL,所以只能选择Logstash。

场景二

对于场景二,如果是同一种数据库,例如Mysql,还是可以选择阿里的cannal。 但是对于其他数据库,例如是Oracle和PostgreSQL,就没办法了

场景三

对于场景三,现有的数据库中,无论哪个数据库,我们都可以使用Trigger-触发器来实现。但触发器增加了原本的SQL的执行时间,同时增加触发器需要更改对应的表结构。另一种方案是使用代码,在代码中进行处理,但这样增加了复杂度。

从目前解决的方案来看,都不是很完美。

CDC-Change Data Capture如何解决上述问题

CDC工作原理

每种数据库都有一个至关重要的日志,用来记录数据库中所有修改操作。

  1. Oracle数据库的日志是Redo Log
  2. MySQL数据库的日志是Binary Log
  3. PostgreSQL数据库的日志是Write Ahead Log

通过监控这些日志,当源数据库发生改变时,监控该日志的软件将识别并提取其中的数据变更操作。当数据库中的数据发生插入、更新或删除时,CDC会捕获并记录这些变更操作的详细信息,包括受影响的表、修改前后的值以及执行操作的时间戳等。这些变更数据可以被传递给其他系统或应用程序,以便它们可以根据这些变更进行相应的处理。

CDC不需要对源数据库进行更改,并且不会对源数据库造成性能损耗。

Kafka Connect 和 Debezium简单介绍

Kafka Connect需要两个connector:

  1. sourceConnector.jar,将源数据导入至Kafka的topic中
  2. sinkConnector.jar,将Kafka topic中的数据导入至目标源

但是Kafka并没有提供特别丰富的connector,那么Debezium就出现了。

你可以把Debezium简单理解成是CDC技术的一种实现,并提供了很多数据库的sourceConnector.jar和sinkConnector.jar

场景二的例子,将Oracle数据库的数据通过CDC方式同步至PostgrSQL中

为了完成此demo,我们需要

  1. 一个三节点的kafka集群
  2. 安装Oracle数据库和PostgreSQL数据库
  3. debezium
  4. docker环境

docker-compose文件以及如何配置全部在GitHub上,想要自己体验一下的同学,请按照仓库中的步骤一步一步运行即可。如有问题可在本博文下留言即可。

使用Debezium时遇到问题的排查思路

核心思路就一条,仔细阅读 Debezium官方的Connector文档,特别是每个Connector的第一部分How the connector works

场景一和场景三的实现思路

理解了上述CDC部分,并且如果你能一步一步跟着源码自己动手体验一次。 那么你会很容易知道如何处理场景一和场景三,场景一和场景三无非是使用不同的sourceConnector.jar和sinkConnector.jar,那么我们的问题就变成了怎么找这些jar包?

去confluent hub搜索即可,提供了大量的jar包,包括Elasticsearch相关的sourceConnector、sinkConnector。每个jar包都有对应的文档。

ETL(Extract, Transform, and Load)和Flink CDC

实际业务场景复杂多样,可能不光光是原封不动的复制数据,特别是有一些复杂报表的场景。我们需要对不同数据表的进行同步,并在同步过程中将多个表的数据组织在一起,形成一条有效记录,然后导入到目标源,上述过程就是ETL

Flink CDC是基于Flink的实现方案,我本人并没有使用过它,这里提一下主要是觉得可能对看博文的你做技术决策有些帮助,根据自己的实际情况去选择适合自己的技术方案。

写在最后

因为我也是才开始慢慢使用CDC解决部分业务场景,所以目前关于Debezium和Kafka Connect的最佳实践还没有特别好的经验分享。基于这个原因,本篇博文并没有太多可供参考的经验,仅仅介绍CDC的思想、提供一些基础示例、不同解决方案的思考思路

参考资料

  • datacater的博文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

敌方移动发射[java坦克大战]

1.首先要确保判断如果敌人坦克存活并且敌人子弹集合等于0了,就根据坦克方向创建一颗子弹,放入到shots集合,并启动。(逻辑:发射子弹后,敌人坦克向前移动一段距离后转向,敌人坦克仍然存活并且刚发射的子弹消亡…

C++-设计一个特殊类

目录 一.设计一个类,不能被拷贝 二.设计一个类只能在堆上创建对象 三.设计一个类只能在栈上创建对象 四. 请设计一个类,不能被继承 五.请设计一个类,只能创建一个对象(单例模式) 1.单例模式: 2. 饿汉模式 一.设计一个类&#x…

代码浅析DLIO(四)---位姿更新

0. 简介 我们刚刚了解过DLIO的整个流程,我们发现相比于Point-LIO而言,这个方法更适合我们去学习理解,同时官方给出的结果来看DLIO的结果明显好于现在的主流方法,当然指的一提的是,这个DLIO是必须需要六轴IMU的&#x…

[WP] ISCTF2023 Web 部分题解

圣杯战争!!! 反序列化伪协议读取 where_is_the_flag 环境变量根目录当前目录 绕进你的心里 利用正则最大回溯绕过 easy_website or select 用双写绕过 空格用/**/绕,报错注入 wafr codesystem(ca\t /f*) webinclude 扫描得到index.bak备份文件打开为加密的代码 写…

1998-2021年全国各区县PM2.5平均浓度数据

1998-2021年全国各区县PM2.5平均浓度数据 1、时间:1998-2021年 2、指标:省、省代码、市、市代码、县代码、县、年份、均值、总和、最小值、最大值、标准差 3、来源:Washington university Atmospheric Composition Analysis Group 4、范围…

LightDB - no_star_transformation

LightDB 从23.4开始支持 no_star_transformation hint。 在Oracle 中no_star_transformation hint 用于提示优化器不执行星型转换。LightDB 不支持星型转换,因此此hint总会起效,下面先介绍下星型转换,然后介绍下hint的用法。 Oracle 星型转换…

2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析

2023年第十二届数学建模国际赛小美赛 C题 雪崩防范 原题再现: 雪崩是极其危险的现象。现在,我们对雪崩是如何形成的已经有了很好的理解,但是我们还不能详细地预测雪崩发生的原因、时间和地点。村庄和道路可以通过各种方式防止雪崩。避免在脆…

Git Hooks实战:提交前检查修改文件中是否包含调试代码

说在前面 不知道大家有没有遇到这样一种情况,平时在写代码调试时有时候会使用到debugger,可能大部分时间在提交代码前会记得把debugger先删除,但可能也会存在将debugger提交上去的情况,那我们该怎么防止出现这种情况呢&#xff1…

torch查看GPU信息常用代码

torch.cuda.device_count() # 可以返回可用 GPU 的数量。torch.cuda.get_device_name(device) # 可以获取特定 GPU 的名称。其中 device 是 GPU 的索引(从 0 开始)# 查看所有gpu for i in range(torch.cuda.device_count()):print(torch.cuda.get_device…

sklearn教程:boston波士顿房价数据集

文章目录 数据集介绍导入库划分训练集测试集导入DataFrame创建学习模型 KNN Linear DecisionTree SVR训练模型预测数据绘图可视化数据标准化模型训练和预测数据集介绍 Boston数据集是一个经典的回归分析数据集,包含了美国波士顿地区的房价数据以及相关的属性信息。该数据集共…

基于Docker安装OpenIM

操作系统:CentOS 7.6 安装支持环境 安装golang 下载安装包 https://dl.google.com/go/go1.21.4.linux-amd64.tar.gz mkdir /opt/go1.21 tar -C /opt/go1.21 -xzf go1.21.4.linux-amd64.tar.gzvi /etc/profile #写入下面内容 export GOPATH/opt/go1.21 export P…

css如何设置文本添加下划线

css文本添加下划线 text-decoration: underline;text-decoration相关属性参数 参数描述none默认。定义标准的文本。underline定义文本下的一条线。overline定义文本上的一条线。line-through定义穿过文本下的一条线。blink定义闪烁的文本。inherit规定应该从父元素继承 text-…

享元设计模式

package com.jmj.pattern.flyweight;public abstract class AbstractBox {//获取图形的方法public abstract String getShape();//显示图形及颜色public void diplay(String color){System.out.println("方块形状:"getShape()",颜色:"color);}}package com…

linux常用命令(干货)

开关机重启相关: linux关机重启命令:https://blog.csdn.net/qq_38295166/article/details/79783404 关机: shutdown -h now 立刻关机 shutdown -h 10 10分钟后关机 重启: shutdown -r now 立刻重启 shutdown -r 10 10分钟后重启 shutdown -r…

基于SpringBoot实现SSMP整合

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

23.Python 图形化界面编程

目录 1.认识GUI和使用tkinter2.使用组件2.1 标签2.2 按钮2.3 文本框2.4 单选按钮和复选按钮2.5 菜单和消息2.6 列表框2.7 滚动条2.8 框架2.9 画布 3. 组件布局4.事件处理 1.认识GUI和使用tkinter 人机交互是从人努力适应计算机,到计算机不断适应人的发展过程&#…

[ 蓝桥杯Web真题 ]-年度明星项目

目录 引入 介绍 准备 目标 效果 规定 思路 知识补充 解答参考 引入 hello,大家好!我注意到了之前发的一篇蓝桥杯Web应用开发的文章是关注度最高的,可能大部分关注我的小伙伴对蓝桥杯Web应用开发比较感兴趣,或者想要参加…

Flink(九)【时间语义与水位线】

前言 2023-12-02-20:05,终于写完啦,最近状态不错。刚写完又收到了她的消息哈哈哈哈,开心。 再去全力打拼一次,奋战一场,就算最后打了败仗也无所谓,至少你留下了足迹。 《解忧杂货店》 1、时间语义 …

第17关 深入理解K8s配置管理:ConfigMap和Secret的终极指南

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维,K8s是如何来进行服务配置管理的呢? 对于容器而言,如果我们想修改一个容器镜像里面的配置,可以在Dockerfile这一步,将修改好的配置复制…

出口贸易媒体发稿7种方法提升转化率的秘密武器解析-华媒舍

出口贸易成为了许多企业发展的重要方向。在这个竞争激烈的市场中,如何让自己的产品脱颖而出,吸引更多客户并提高转化率,成为了每个企业家都面临的挑战。本文将向大家介绍7种提升转化率的秘密武器:出口贸易媒体发稿方法。 1. 出口贸…