Debezium发布历史35

原文地址: https://debezium.io/blog/2018/07/19/advantages-of-log-based-change-data-capture/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

基于日志的变更数据捕获的五个优点
七月 19, 2018 作者: Gunnar Morling
讨论
昨天,我有机会向达姆施塔特 Java 用户组介绍 Debezium 和变更数据捕获 (CDC) 的想法。这是一个美好的夜晚,有很多有趣的讨论和问题。问题之一如下:与简单地轮询更新记录相比,使用 Debezium 等基于日志的变更数据捕获工具有什么优势?

首先,这两种方法有什么区别?使用基于轮询(或基于查询)的 CDC,您可以重复运行查询(例如通过 JDBC),以从要捕获的表中检索任何新插入或更新的行。相比之下,基于日志的 CDC 通过对数据库日志文件(例如 MySQL 的 binlog 或 MongoDB 的 op log)的任何更改做出反应来工作。

由于这不是第一次出现这个问题,我想我也可以在博客上提供更广泛的答案。这样,如果问题再次出现,我将来就可以参考这篇文章:)

因此,言归正传,以下是我列出的基于日志的 CDC 相对于基于轮询的方法的五个优点。

捕获所有数据更改
通过读取数据库的日志,您可以按照应用程序的确切顺序获得所有数据更改的完整列表。这对于您对记录更改的完整历史记录感兴趣的许多用例至关重要。相反,使用基于轮询的方法,您可能会错过两次轮询循环运行之间发生的中间数据更改。例如,可能会发生在两次轮询之间插入和删除一条记录的情况,在这种情况下,基于轮询的 CDC 永远不会捕获该记录。

与此相关的是停机时间,例如更新 CDC 工具时。使用基于轮询的 CDC,一旦 CDC 工具重新上线,只会捕获给定记录的最新状态,从而错过停机期间对记录发生的任何早期更改。基于日志的 CDC 工具将能够从数据库关闭之前停止的位置恢复读取数据库日志,从而捕获数据更改的完整历史记录。

事件延迟低,同时避免 CPU 负载增加
通过轮询,您可能会想增加轮询尝试的频率,以减少错过中间更新的机会。虽然这在某种程度上有效,但过于频繁的轮询可能会导致性能问题(因为用于轮询的查询会导致源数据库负载)。另一方面,扩大轮询间隔将减少 CPU 负载,但可能不仅会导致错过更改事件,还会导致传播数据更改的延迟更长。基于日志的 CDC 允许您近乎实时地对数据更改做出反应,而无需花费 CPU 时间重复运行轮询查询。

对数据模型没有影响
轮询需要一些指示器来识别自上次轮询以来已更改的记录。因此,所有捕获的表都需要有一些列LAST_UPDATE_TIMESTAMP,可以用来查找更改的行。在某些情况下这可能没问题,但在其他情况下这样的要求可能并不理想。具体来说,您需要确保在所有要由写入应用程序或通过触发器捕获的表上正确维护更新时间戳。

可以捕获删除
当然,轮询不会让您识别自上次轮询以来已删除的任何记录。通常,这对于类似复制的用例来说是一个问题,在这些用例中,您希望源数据库和复制目标上有相同的数据集,这意味着您还希望删除接收器端的记录(如果它们已在源数据库。

可以捕获旧记录状态和更多元数据
根据源数据库的功能,基于日志的 CDC 可以为更新和删除事件提供旧记录状态。而通过轮询,您只能获得当前的行状态。对于许多用例来说,在单个更改事件中方便地使用旧行状态可能很有趣,例如,如果您想向应用程序用户显示包含新旧列值的完整数据更改以进行审计。

此外,基于日志的方法通常可以提供模式更改流(例如,以应用的 DDL 语句的形式)并公开其他元数据,例如事务 ID 或应用特定更改的用户。这些事情通常也可以通过基于查询的方法来实现(取决于数据库的功能),但我还没有真正看到它在实践中完成。

概括
就是这样,基于日志的变更数据捕获的五个优点。请注意,这并不是说基于轮询的 CDC 没有其应用程序。例如,如果您的用例可以通过每小时传播一次更改来满足,并且错过之间有效的记录的中间版本也不是问题,那么就完全没问题。

但是,如果您有兴趣近乎实时地捕获数据更改,确保您不会错过任何更改事件(包括删除),那么我非常建议您探索基于日志的 CDC 的可能性,如德贝西姆。Debezium 连接器为您完成所有繁重的工作,即您不必处理各个数据库的所有低级细节以及从日志中获取更改的方法。相反,您可以使用 Debezium 生成的通用且基本统一的变更数据事件。

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

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

相关文章

github鉴权失败

问题: 如上图所示 git push 时发生了报错,鉴权失败; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥,勾选repo栏,选择有效期,为密钥命…

【C#与Redis】--高级主题--Redis 管道

一、引言 1.1 概念介绍 Redis管道是一种用于优化多个命令执行的机制,允许客户端将多个命令一次性发送给服务器,然后一次性接收所有命令的返回结果。这种机制可以减少客户端与服务器之间的网络往返次数,从而提高性能。 1.2 作用 提高性能&…

java 对数转换log_a {c}

1、换底公式 l o g a c l o g x c l o g x a log_a c \frac{log_x c}{log_x a} loga​clogx​alogx​c​ 2、推理过程 有: a b c ,证明 l o g a c l o g x c l o g x a 取对数 ( l o g x ) : l o g x a b l o g x c l o g x a b b ∗ …

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中,一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库,它为开发者提供了丰富的功能和灵活性,使得…

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 (1)项目可行性分析 (2)需求描述 (3)界面原型 (4)数据库设计 (5)后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…

Spark作业的调度与执行流程

Apache Spark是一个分布式计算框架,用于处理大规模数据。了解Spark作业的调度与执行流程是构建高效分布式应用程序的关键。本文将深入探讨Spark作业的组成部分、调度过程以及执行流程,并提供丰富的示例代码来帮助大家更好地理解这些概念。 Spark作业的组…

第09章:随堂复习与企业真题(异常处理)

来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备) 基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第09章:随堂复习…

[Angular] 笔记 16:模板驱动表单 - 选择框与选项

油管视频: Select & Option (Template Driven Forms) Select & Option 在 pokemon.ts 中新增 interface: export interface Pokemon {id: number;name: string;type: string;isCool: boolean;isStylish: boolean;acceptTerms: boolean; }// new interface…

前端图片适配不同屏幕方案

预备知识: 设备独立像素,以下图的iphone12 Pro为例,390*844表示的就是设备独立像素(DIP),也可以理解为CSS像素 物理像素(设备像素),就是屏幕的分辨率,显示屏就是由一个个物理像素…

QT/C++ 远程数据采集上位机+服务器

一、项目介绍: 远程数据采集与传输 课题要求:编写个基于TCP的网络数据获取与传输的应用程序; 该程序具备以下功能: 1)本地端程序够通过串口与下位机(单片机)进行通信,实现数据采集任务 2)本地端程序能将所获取下位机数据进行保存(如csv文本格式等); 3…

初识隧道代理HTTP:理解基础概念的重要性

嗨,小伙伴们!如果你对网络世界充满好奇,那么这篇文章就是为你准备的。我们将一起踏上一段奇妙的旅程,探索一个叫做“隧道代理HTTP”的新领域。但在这之前,我们需要先穿上“基础概念”的防护服,以免被这个复…

axios配置代理

ChatGPT(3.5/4.0)国内镜像:https://www.atalk-ai.com/ 在Node.js中,你可以使用axios库来发送HTTP请求,并且可以配置它来使用代理服务器。以下是如何配置axios以通过位于127.0.0.1:15236的代理服务器发送请求的例子&am…

MR实战:实现数据去重

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据文件1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、Map阶段实现(1)创建Maven项目(2)添加相关依赖…

一语道破爬虫,来揭开爬虫面纱

目录 一、爬虫(网络蜘蛛(Spider)) 1.1、是什么: 1.2、学习的原因 1.3、用在地方: 1.4、是否合法: 1.5、后果 案例: 二、应用领域 三、Robots协议 四、抓包 4.1、浏览器抓包 4.2、抓包工具 常见…

从0到1浅析Redis服务器反弹Shell那些事

文章目录 前言Redis服务1.1 特点与应用1.2 安装与使用1.3 语法和配置1.4 未授权访问 反弹Shell2.1 Web服务写入Webshell2.2 Linux定时任务反弹shell2.3 /etc/profile.d->反弹shell2.4 写入ssh公钥登录服务器2.5 利用Redis主从复制RCE2.6 SSRF漏洞组合拳->RCE 总结 前言 …

2023年终-顺势而为

疫情以来,越来越感觉到顺势的重要性,就像一个人走路一样,如果方向错了,会绕很多弯才能到达终点。 雷军说,站在风口上猪都能飞起来。 很多人明白这个道理,但是去付出实践的人不多。第一,不愿意进…

stm32中的i2c协议

stm32中I2C 文章目录 stm32中I2CI2C 协议简介I2C物理层协议层I2C基本读写过程 **通讯的起始和停止信号****数据有效性****地址及数据方向****响应** STM32的I2C特性及架构**STM32** **的** I2C外设简介STM32 的 I 2C 架构剖析通讯引脚 通讯过程主发送器主接收器 I2C初始化结构体…

【Linux】指令(本人使用比较少的)——笔记(持续更新)

文章目录 ps -axj:查看进程ps -aL:查看线程echo $?:查看最近程序的退出码jobs:查看后台运行的线程组fd 任务号:将后台任务提到前台bg 任务号:将暂停的后台程序重启netstat -nltp:查看服务及监听…

Unity Meta Quest 一体机开发(十二):【手势追踪】Poke 交互 - 用手指点击由 3D 物体制作的 UI 按钮

文章目录 📕教程说明📕给玩家配置 HandPokeInteractor📕用 3D 物体制作可以被点击的 UI 按钮⭐搭建物体层级⭐给物体添加脚本⭐为脚本变量赋值 📕模仿官方样例按钮的样式📕在按钮上添加文字📕修改按钮图片 …

Unity应该如何学

Unity是目前最主流的游戏开发引擎,AppStore里面排名前列的游戏绝大部分都是采用Unity引擎来开发的,所以Unity引擎的前景也是非常好的,同时很多AR,VR也是基于Unity的,所以对于做游戏而言Unity引擎是非常值得学习的。如何学习Unity呢…