Debezium日常分享系列之:Debezium 3.0.2.Final Released

Debezium日常分享系列之:Debezium 3.0.2.Final Released

  • 新功能和改进
  • 核心
    • 使用never snapshot模式执行阻塞快照
    • MongoDB
    • Oracle
  • Vitess
  • JDBC sink连接器的更改
  • Debezium Operator
  • 更多Debezium技术内容

新功能和改进

Debezium 3.0.2.Final引入了一些改进和功能,让我们逐个看看每个功能。

核心

使用never snapshot模式执行阻塞快照

Debezium阻塞快照过程旨在根据提供的信号执行初始快照,选择性地发出一个或多个表的历史数据。当此功能与never snapshot模式配对时,会导致意外行为。

在此版本中,我们修改了连接器偏移量,以跟踪配置的snapshot.mode,允许阻塞快照在有信号时成功执行初始快照,即使配置了never perform a snapshot的快照模式。这使用户可以在此配置下安全地使用此功能。

由于连接器偏移存储的变化,一旦连接器升级到 3.0.2.Final 或更高版本,则连接器无法降级到 3.0.1.Final 或更早版本。

MongoDB

RowsChanged JMX度量类型已更改

在MongoDB连接器的早期版本中,RowsChanged JMX度量以java.util.Map的形式公开,这与关系连接器上公开的相同JMX度量TabularData相矛盾。在3.0.2.Final中已经修复了这个问题,JMX度量在所有连接器实现中均使用TabularData以实现统一性。

如果您以前捕获了RowsChanged,任何现有的MongoDB JMX管道可能需要进行调整。

Oracle

更高精度的时间戳

传统上,Debezium for Oracle在挖掘会话连接上设置的NLS会话属性控制下,以毫秒精度发出列时间戳值。精度得到改进,并提供了基于纳秒(也称为FF9)的值。

发出的字段类型基于列的数据类型,因此发出的字段数据类型保持不变。改变的是那些具有微秒或纳秒为基础值的列的情况,在这些列以前为零的情况下,现在它们将具有非零值。

警告或跳过DML异常

可以配置event.processing.failure.handling.mode以使其在特定连接器错误条件下失败、警告或跳过,以提高连接器对各种数据问题的可靠性。此配置在观察到DDL失败时用于控制Oracle连接器的行为。

在此版本中,event.processing.failure.handling.mode也用于控制基于DML的事件的故障。如果Oracle连接器在解析您的插入、更新或删除操作时出现问题,您可以根据需要安全地配置连接器以失败、警告或跳过DML事件。

默认行为是在连接器无法安全处理事件时始终失败。通过将其调整为警告或跳过,虽然连接器将在失败的事件之后安全地继续进行,但会引入数据丢失,需要手动处理。

Vitess

性能改进

在早期版本的Debezium for Vitess连接器中,连接器使用基于正则表达式的过滤系统,根据不同后缀的前缀匹配所有表,并根据配置应用后续的排除。这可能会浪费CPU资源并创建热点,因为会为稍后要过滤和垃圾回收的事件创建中间对象。

在此版本中,我们通过在事件处理链中更早地应用过滤来改进Vitess连接器处理此用例的方式。这应该减少创建的中间对象数量,并提高连接器的整体性能。对于具有相同前缀和不同后缀的关键空间,这应该比旧版本提供更好的整体性能。

JDBC sink连接器的更改

由于sink模块使用的是集合而不是表的命名约定,因此已弃用并替换了几个配置属性。旧属性将在Debezium 3.0.x版本中继续工作;但是在Debezium 3.1版本中将被删除。

  • table.name.format属性被collection.name.format属性替换。
  • table.naming.strategy属性被collection.naming.strategy属性替换。

此外,由table.naming.strategy属性指定的io.debezium.connector.jdbc.naming.TableNamingStrategy的约定已被弃用。引入了一个新的io.debezium.sink.naming.CollectionNamingStrategy,具有略微不同的签名。

TableNamingStrategy contract

 /**
     * Resolves the logical table name from the sink record.
     *
     * @param config sink connector configuration, should not be {@code null}
     * @param record Kafka sink record, should not be {@code null}
     * @return the resolved logical table name; if {@code null} the record should not be processed
     */
    String resolveTableName(JdbcSinkConnectorConfig config, SinkRecord record);

CollectionNamingStrategy contract

   /**
     * Resolves the logical collection name from the Debezium sink record.
     *
     * @param record Debezium sink record, should not be {@code null}
     * @param collectionNameFormat the format string for the collection name (mapped from the topic name)
     * @return the resolved logical collection name; if {@code null} the record should not be processed
     */
    String resolveCollectionName(DebeziumSinkRecord record, String collectionNameFormat);

主要的区别包括新的DebeziumSinkRecord取代了SinkRecord,并显式传递集合命名格式而不是配置类。

如果您在Debezium JDBC sink连接器的部署中实现了自定义的TableNamingStrategy,请确保调整您的代码以使用新的CollectionNamingStrategy,以便在更新到Debezium 3.1+时您的流水线能够继续安全运行。

Debezium Operator

启用Debezium Server REST端点

现在,可以通过使用Debezium Operator在Kubernetes上部署Debezium Server来自动启用Debezium Server的API REST端点。在部署描述符的spec部分中,您可以包含runtime.api.enabled属性来切换API端点,如下所示。

YAML 配置示例

apiVersion: debezium.io/v1alpha1
kind: DebeziumServer
metadata:
  name: my-debezium
spec:
  image: quay.io/debezium/server:3.0.2.Final
  quarkus:
    config:
      log.console.json: false
      kubernetes-config.enabled: true
      kubernetes-config.secrets: postgresql-credentials
  runtime:
    api:
      enabled: true
  sink:
    type: kafka
    config:
      producer.bootstrap.servers: dbz-kafka-kafka-bootstrap:9092
      producer.key.serializer: org.apache.kafka.common.serialization.StringSerializer
      producer.value.serializer: org.apache.kafka.common.serialization.StringSerializer
  source:
    class: io.debezium.connector.postgresql.PostgresConnector
    offset:
      memory: { }
    schemaHistory:
      memory: { }
    config:
      database.hostname: postgresql
      database.port: 5432
      database.user: ${POSTGRES_USER}
      database.password: ${POSTGRES_PASSWORD}
      database.dbname: ${POSTGRES_DB}
      topic.prefix: inventory
      schema.include.list: inventory

默认情况下,Debezium Server API 端点是禁用的,但可以通过将 spec.runtime.api.enabled 设置为 true 来启用,如上所示。

更多Debezium技术内容

更多Debezium技术请参考:

  • Debezium技术专栏

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

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

相关文章

基于YOLOv8深度学习的智慧考场考试防作弊行为检测系统设计与实现(PyQt5界面+数据集+训练代码)

随着教育领域的数字化和智能化发展,考试中的作弊行为已成为影响考试公平性和效率的重要问题。为了解决这一问题,本研究设计并实现了一种基于YOLOv8深度学习模型的智慧考场考试防作弊行为检测系统。系统采用YOLOv8算法对考场中的视频图像数据进行实时分析…

Android 天气APP(三十七)新版AS编译、更新镜像源、仓库源、修复部分BUG

上一篇:Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife 新版AS编译、更新镜像源、仓库源、修复部分BUG 前言正文一、更新镜像源① 腾讯源③ 阿里源 二、更新仓库源三、修复城市重名BUG四、地图加载问题五、源码 前…

掌握 Spring 事务管理:深入理解 @Transactional 注解

在业务方法上使用Transactional开启声明式事务时,很有可能由于使用方式有误,导致事务没有生效。 环境准备 表结构 CREATE TABLE admin (id bigint(20) unsigned NOT NULL AUTO_INCREMENT,username varchar(255) DEFAULT NULL,password varchar(255) …

Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册

介绍 Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,旨在为微服务架构中的分布式系统提供事务管理支持。Seata 通过提供全局事务管理,帮助开发者在分布式环境中保持数据一致性 …

【设计模式系列】责任链模式(十六)

一、什么是责任链模式 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式。其核心思想是将请求的发送者和接收者解耦,通过一个中介链来传递请求,使得多个对象都有可能接收请求,从而避免请求发送者和接…

实时数据研发 | Flink技术栈

下周要开始接触一些实时的内容了,想来是很幸运的,这是我在新人培训上提问过技术前辈的问题:“想学习实时相关技术,但是部门没有类似的需求,应该如何提升?”当时师姐说先用心去学,然后向主管证明…

python对tif数据重投影

一、不同投影坐标系的区别 地理坐标系(Geographic Coordinate System, GCS)和投影坐标系(Projected Coordinate System, PCS)是两种常见的坐标系统,它们在表示地理信息时有着不同的方式。以下是它们的主要区别&#x…

Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能

网站部署在华为云服务器上,Debian系统,使用DjangoNginxuwsgi搭建。最终效果如下图所示。 一、响应逻辑顺序 1. 聊天页面请求 客户端请求/chat/(输入聊天室房间号界面)和/chat/room_name(某个聊天室页面)链…

多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)算法

概述 多目标粒子群优化(MOPSO) 是粒子群优化(PSO)的一种扩展,用于解决具有多个目标函数的优化问题。MOPSO的目标是找到一组非支配解(Pareto最优解),这些解在不同目标之间达到平衡。…

oracle会话追踪

一 跟踪当前会话 1.1 查看当前会话的SID,SERIAL# #在当前会话里执行 示例: SQL> select distinct userenv(sid) from v$mystat; USERENV(SID) -------------- 1945 SQL> select distinct sid,serial# from v$session where sid1945; SID SERIAL# …

python 画图例子

目录 多组折线图点坐标的折线图 多组折线图 数据: 第1行为x轴标签第2/3/…行等为数据,其中第一列为标签,后面为y值 图片: 代码: import matplotlib.pyplot as plt# 原始数据字符串 # 第1行为x轴标签 # 第2/3/...行等为数据,其中第一列为标签,后面…

未来已来:少儿编程竞赛聚焦物联网,激发创新潜力

随着人工智能与物联网技术(IoT)的快速发展,少儿编程教育正在迎来新的变革浪潮。近年来,各类少儿编程竞赛纷纷增加了物联网相关主题,要求学生结合编程知识和硬件设备设计智能家居、智慧城市等创新项目。这一趋势不仅丰富…

Java-08 深入浅出 MyBatis - 多对多模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

字符串专题 算法小题

感觉很久不做题了, 本身自己虽然就没水平就是啦哈哈~ 那下面分享几道最近写的几道题, 都很简单, 是关于"字符串"的, 只不过会稍微用到一点代码能力就是了, 算是比较基础的题目. 目录 1.最长公共区域(⭐⭐⭐ 代码)1.1 题目描述1.2 题目思路方法1: 两两求公共区域方法2…

虚拟化的三种方式

1.前言 Virtualization(虚拟化)是让公开的虚拟资源等同于被虚拟化的底层物理资源。虚拟化在各个领域应用很广泛,不局限于计算机科学领域。无论是在硬件、软件还是在嵌入式子系统中,虚拟化总是使用或组合三种简单的技术来实现的:多路复用(Mul…

使用yolov5查看模式标注情况

import cv2 from ultralytics import YOLO# 加载模型 model YOLO(E:\\yolov\\yolov9\\runs\\detect\\train4\\weights\\best.pt) # 替换为您的模型路径# 读取视频文件 cap cv2.VideoCapture(5.mp4) # 替换为您的视频文件路径# 定义输出视频的编码器和创建VideoWriter对象 f…

Rust 力扣 - 198. 打家劫舍

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 假设f(i)表示在[1, i]号内的房屋内进行偷盗能够获得的最高金额 存在递推公式 f(i) max(f(i - 1), f(i - 2) nums[i]) 即f(i)为选择i - 1号房屋的最大金额 和 选择i - 2号房屋的最大金额 的最大值 题解代码 …

Redis持久化、主从及哨兵架构详解

Redis持久化 RDB快照(snapshot) 在默认情况下,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。 你可以对Redis进行设置,让它在“N秒内数据集至少有M个改动”这一条件被满足时,自动保存一次数据集。 比…

解决启动Tomcat时出现的乱码问题

日志乱码 日志乱码就是启动Tomcat时红色的字体出现乱码(下图没有乱码)。 解决方案 : 找到Tomcat的安装目录,点进conf目录 点进logging.properties文件 找到java.util.logging.ConsoleHandler.encoding字段,修改成GBK…

网络爬虫——常见问题与调试技巧

在开发网络爬虫的过程中,开发者常常会遇到各种问题,例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案,详细介绍解决常见错误的方法,以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…