Debezium系列之:Debezium JDBC 连接器支持批量同步数据

Debezium系列之:Debezium JDBC 连接器支持批量同步数据

  • 一、设置批次
  • 二、配置消费者最大轮询记录
  • 三、性能测试结果
  • 四、结论

一、设置批次

由于我们之前的版本主要关注核心功能,因此我们的最新版本致力于解决与连接器相关的主要痛点:性能。

  • 目标是提高每秒处理的事件数 (EPS) 的吞吐量。为了实现这一目标,我们重新访问了连接器以支持批量事件的处理。
  • 您现在可以使用新属性来微调批次的大小:batch.size。
  • batch.size 属性定义尝试批处理到目标表中的记录数。然而,值得注意的是,处理记录的实际大小取决于 Kafka Connect 工作线程的 Consumer.max.poll.records 属性。
  • 需要注意的是,如果您将 Connect Worker 属性中的 Consumer.max.poll.records 设置为低于batch.size的值,则批处理将受到consumer.max.poll.records和预期batch.size的限制。可能无法实现。

二、配置消费者最大轮询记录

  • 如果您不想在 Connect 工作线程上全局配置consumer.max.poll.records 属性,则可以选择使用consumer.override.max.poll.records 为特定连接器设置底层消费者的max.poll.records连接器配置。
  • 要启用每个连接器的配置属性并覆盖默认工作线程属性,请将以下参数添加到工作线程属性文件中:connector.client.config.override.policy。
  • 此属性定义连接器可以覆盖哪些配置。默认实现是“All”,但其他可能的策略包括“None”和“Principal”。
  • 当 Connector.client.config.override.policy=All 时,属于工作线程的每个连接器都可以覆盖工作线程配置。您现在可以使用以下覆盖前缀进行接收器连接器配置:consumer.override.。
  • 值得注意的是,即使您设置了 max.poll.records(默认值为 500),您收到的记录也可能会更少。这是由于其他属性可能会影响从主题/分区获取记录。
参数默认值
fetch.max.bytes52428800 (52MB)
max.partition.fetch.bytes1048576 (1MB)
message.max.bytes1048588 (1MB)
max.message.bytes1048588 (1MB)

因此,根据您预期的有效负载大小调整这些,以达到所需的轮询记录数。

三、性能测试结果

性能测试的目的是了解批量支持如何改进 EPS。因此,这些数字并不反映任何实际场景,而是展示了与旧 JDBC 版本相比的相对改进。

用于测试的配置
所有测试均在 ThinkPad T14s Gen 2i 上执行

CPU:Intel® Core™ i7-1185G7 @ 3.00GHz(8 核)
内存:32GB
磁盘:512G​​B NVMe

Docker 容器内的所有必需组件(Kafka、Connect、Zookeeper 等)。

用于测试的表具有以下结构:

CREATE TABLE `aviation` (
  `id` int NOT NULL,
  `aircraft` longtext,
  `airline` longtext,
  `passengers` int DEFAULT NULL,
  `airport` longtext,
  `flight` longtext,
  `metar` longtext,
  `flight_distance` double DEFAULT NULL
)

测试计划

我们计划执行这些测试:

  • 来自单个表的 100K 事件
    • MySQL 批处理与无批处理
  • 来自三个不同表的 100K 事件
    • MySQL 批处理与无批处理
  • 来自单个表的 100 万个事件
    • MySQL 批处理,批处理大小:500、1000、5000、10000 与无批处理
    • MySQL 批处理,批量大小:500、1000、5000、10000(使用 JSONConverter)
    • MySQL 批处理,批处理大小:500、1000、5000、10000(使用 Avro)
    • MySQL 批处理,批处理大小:500、1000、5000、10000,使用 Avro,目标表上没有索引

在这里插入图片描述
图 1 说明了处理单个表中 100,000 个事件所需的总执行时间,比较了具有和不具有批处理支持的 MySQL 连接器。

尽管batch.size和consumer.max.poll.records的默认值都设置为500,但由于有效负载大小的考虑,观察到的实际大小被减少到337条记录。

正如预期的那样,我们可以观察到具有批量支持的 Debezium JDBC 连接器速度更快。

在这里插入图片描述
在图 2 中,我们观察到将 100,000 个事件拆分到三个表中不会影响结果。与非批处理版本相比,具有批处理支持的 Debezium JDBC 连接器仍然更快。

在这里插入图片描述
在图 3 中,很明显,当事件数达到 1,000,000 时,性能提升变得更加明显。具有批量支持的 Debezium JDBC 连接器大约需要 7 分钟才能插入所有事件,平均吞吐量为 2300 eps,而没有批量支持的过程需要 570 分钟(9.5 小时)。因此,具有批量支持的 Debezium JDBC 连接器比不具有批量支持的版本快 79 倍。

在这里插入图片描述
在图 4 中,我们观察 Debezium JDBC 连接器使用 org.apache.kafka.connect.json.JsonConverter 转换器并使用不同的 batch.size 设置写入 MySQL 的行为。虽然最初的差异很明显,但吞吐量明显持续下降。平均而言,所有batch.size配置大约需要7分钟来处理所有事件。

这引起了我们的担忧。在进行彻底的分析(分析)后,我们发现了另一个问题:事件反序列化。这很有可能是导致batch.size设置不可扩展的原因。

尽管序列化提高了可扩展性,但我们仍然缺乏关于测试运行期间 EPS 减速的答案。一个假设可能涉及某处某种类型的缓冲区。

在这里插入图片描述
然后我们使用 Avro 进行了实验,如图 5 所示,结果显示了显着的改进。正如预期的那样,使用batch.size = 500处理1,000,000个事件比使用batch.size = 10000慢。值得注意的是,在我们的测试配置中,batch.size 的最佳值为 1000,从而实现最快的处理时间。

虽然结果比 JSON 更好,但仍然存在一些性能下降。

为了识别代码中的潜在瓶颈,我们添加了一些指标,发现大部分时间都花在了在数据库上执行批处理语句。

进一步的调查显示,我们的表在主键上定义了一个索引,这会减慢插入速度。

在这里插入图片描述
在图 6 中,您可以看到使用 Avro 且没有主键索引时性能的提高。较高的batch.size 值也可以明显提高性能。

四、结论

我们探索了调整batch.size如何增强Debezium JDBC连接器的性能,并讨论了最大化其优势的正确配置。同样重要的是遵守针对特定数据库量身定制的高效插入的性能提示和一般准则。

这里有一些例子:

  • MySQL - 优化 INSERT 语句
  • MySQL - 性能扩展
  • PostgreSQL - 填充数据库

虽然某些设置可能特定于某些数据库,但一些通用原则适用于大多数数据库。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑组件整理(持续更新...)

1、*芯片 CPU(承担着负责的运算); 量大阵营: AMD | Intel i5 12400F 6核12线 7nm -- 1189元 r7 5700x 8核16线 7 nm -- 1500元; ARM采用的是RISC精简指令集计算、 主要应用于移动终端之中,类如手机&#xff0c…

电化学仿真的基础知识笔记

1 概述 电化学反应是一种特殊的化学反应,其能量转移形式为化学能和电能之间互相转换。根据能量转换方向,可分为两类: 原电池(Galvanic cells):将化学能转化为电能,对外放电电解槽(…

设计模式-解释器模式

设计模式专栏 模式介绍模式特点应用场景解释器模式和模板模式有什么区别和联系代码示例Java实现解释器模式Python实现解释器模式 解释器模式在spring中的应用 模式介绍 解释器模式是一种行为型设计模式,它定义了一门语言的文法表示,并建立了一个解释器来…

【PCB专题】如何批量导出已画好的PCB器件封装库

在进行PCB设计时,有可能需要从已有PCB上导出封装,利用这些封装进行新的设计。Allegro PCB设计工具的Export Libraries功能,就可以帮助我们快速的导出PCB上所有类型的封装和焊盘文件。 打开需要导出封装的PCB文件,然后点击File-Export->Libraries菜单,如下图所示。 在…

【Linux系统基础】(1)Linux基础命令全面详解

在计算机世界中,Linux操作系统以其稳定性、安全性和开源性而受到广大程序员和系统管理员的喜爱。然而,对于初学者来说,Linux的命令行界面可能会显得有些复杂和难以理解。本文将详细介绍一些常用的Linux基础命令,帮助你更好地理解和…

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip。 (3)…

HIS项目源码,自主研发+应用实例,整合电子病历系统、LIS系统,支持电子病历四级

医院云HIS系统源码,采用前后端分离架构,SaaS云部署模式 前端:AngularNginxJavaScript 后端:JavaSpring,SpringBoot,SpringMVC等 数据库:MySQL MyCat 1、自主研发应用实例,整合电子病…

vue中的事件修饰符、表单双向数据绑定和计算属性

目录 一、事件修饰符 二、表单双向数据绑定 模拟双向数据绑定(双向数据绑定底层原理) 三、计算属性 计算属性和methods方法区别? 计算属性和watch区别? 一、事件修饰符 stop 阻止事件冒泡 prevent 阻止事件默认行为 ca…

TensorRT-Alpha FAQ

1、linux下出现错误&#xff1a; libyolov8.so: undefined reference to sample::splitToStringVec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char) collect2: error: ld returned 1 exit status CMa…

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

IDEA常用快捷键一

一、文本编辑 1、Ctrl X &#xff1a;剪切 剪切选中的文本&#xff0c;若是没有选中&#xff0c;则剪切当前行。 2、CtrlC&#xff1a;复制 复制选中文本&#xff0c;若未选中则复制当前行。 3、CtrlV&#xff1a;粘贴 4、Ctrl Shift V: 从历史中选择粘贴 从历史剪…

Stream 流详细总结

Stream 流详细总结 一、Stream 是什么二、流的创建1、Stream 创建2、Collection 集合创建&#xff08;最常见的一种&#xff09;3、Array 数组创建4、文件创建5、函数创建 三、流的操作1、中间操作distinct 去重filter 过滤map 映射flatMap 映射汇总sorted 排序limit 截断skip …

LTE之接口协议

一、接口协议栈 接口是指不同网元之间的信息交互方式。既然是信息交互&#xff0c;就应该使用彼此都能看懂的语言&#xff0c;这就是接口协议。接口协议的架构称为协议栈。根据接口所处位置分为空中接口和地面接口&#xff0c;响应的协议也分为空中接口协议和地面接口协议。空…

mysql复习笔记06(小滴课堂)

mysql数据安全之备份的背景意义 介绍数据备份 mysql数据安全之mysqldump备份实例&#xff08;跨机器&#xff09; 一般存在于mysql的bin目录下。中小型企业&#xff0c;数据量不是特别大的时候可以使用这个方式备份。 可以看到备份过来的库了。这是备份单个数据库。 如果想备份…

龙芯loongarch64服务器编译安装tensorflow-io-gcs-filesystem

前言 安装TensorFlow的时候,会出现有些包找不到的情况,直接使用pip命令也无法安装,比如tensorflow-io-gcs-filesystem,安装的时候就会报错: 这个包需要自行编译,官方介绍有限,这里我讲解下 编译 准备 拉取源码:https://github.com/tensorflow/io.git 文章中…

论文写作工具 - 基于Tkinter的AI模型与文档处理

本工具不开源&#xff0c;需要的联系chsengni163.com 论文写作工具 - 基于Tkinter的AI模型与文档处理 概述 这个工具是一个基于Python的Tkinter库创建的图形用户界面应用&#xff0c;旨在帮助用户利用AI模型编写论文并自定义文档格式。通过结合AI技术和文档处理功能&#xf…

java八股 设计模式

企业场景篇-03-设计模式-工厂设计模式-工厂方法模式_哔哩哔哩_bilibili 1.简单工厂模式 新加咖啡类的时候需要在唯一的那个工厂类里加代码&#xff0c;这样就耦合了 2.工厂模式 相对于简单模式的一个工厂生产所有咖啡&#xff0c;这里只定义了一个抽象咖啡工厂&#xff0c;然…

【数据结构】最短路径算法实现(Dijkstra(迪克斯特拉),FloydWarshall(弗洛伊德) )

文章目录 前言一、Dijkstra&#xff08;迪克斯特拉&#xff09;1.方法&#xff1a;2.代码实现 二、FloydWarshall&#xff08;弗洛伊德&#xff09;1.方法2.代码实现 完整源码 前言 最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点…

FPGA设计时序约束十三、Set_Data_Check

目录 一、序言 二、Set Data Check 2.1 基本概念 2.2 设置界面 2.3 命令语法 三、工程示例 3.1 工程代码 3.2 约束设置 3.3 时序报告 四、参考资料 一、序言 通常进行时序分析时&#xff0c;会考虑触发器上时钟信号与数据信号到达的先后关系&#xff0c;从而进行setu…

文字编辑软件,批量给多个文本添加文档内容

在当今信息爆炸的时代&#xff0c;文字编辑工作是很多人需要面对的&#xff0c;而怎么快速的完成编辑工作&#xff0c;则是很多人所思考解决的。现在有一款很好用的软件——首助编辑高手&#xff0c;可以批量对多个文本文档内容进行处理&#xff0c;能帮你在文字编辑的工作上节…