Debezium系列之:发布Debezium 2.3.0.Final

news2024/12/24 8:31:25

Debezium系列之:发布Debezium 2.3.0.Final

  • 一、重大变化
    • 1.PostgreSQL / MySQL 安全连接更改
    • 2.JDBC 存储编码更改
  • 二、新功能和改进
    • 1.Debezium Server支持K8s
    • 2.新的通知子系统
    • 3.新的可扩展信号子系统
    • 4.JMX 信号和通知集成
    • 5.新的 JDBC 存储子系统
    • 6.PostgreSQL 流式传输的恰好一次传送
    • 7.PostgreSQL 副本身份更改
    • 8.Oracle RAC 改进
  • 三、下一步

一、重大变化

我们通常会尝试尽可能避免次要版本中的重大更改,但不幸的是,有时此类更改是不可避免的,特别是如果某个功能可能是作为实验性引入的。 Debezium 2.3 引入了两项重大更改,具体取决于您是从预览版本还是早期稳定版本升级:

  • PostgreSQL / MySQL 安全连接更改
  • JDBC 存储编码更改

1.PostgreSQL / MySQL 安全连接更改

  • Debezium for PostgreSQL 和 MySQL 可以配置为使用安全的 SSL 连接。对于 PostgreSQL,这可以通过配置database.sslmode 来完成,而对于MySQL,这可以通过database.ssl.mode 来完成。
  • 在 Debezium 2.3 中,此配置选项不再默认为禁用 (PostgreSQL) 或禁用 (MySQL),而是默认为首选 (PostgreSQL) 和首选 (MySQL)。这意味着,当尝试使用加密的安全连接进行连接不可用时,连接器将默认使用不安全的连接,除非另有配置。

2.JDBC 存储编码更改

  • Debezium 2.3.0.alpha1 引入了新的实验性 JDBC 存储模块。该存储模块默认使用UTF-16作为默认编码;但是,大多数数据库更喜欢将 UTF-8 作为默认值。如果您从 Debezium 2.3.0.Alpha1 升级,则 Debezium 2.3.0.Beta1 及更高版本现在在使用 JDBC 存储模块存储数据时使用 UTF-8,以与典型数据库默认值保持一致。

二、新功能和改进

Debezium 2.3 包含大量新功能改进,其中包括:

  • Kubernetes 的 Debezium 服务器运营商
  • 新的通知子系统
  • 具有新通道的新型可扩展信号子系统
  • JMX 信号和通知集成
  • 新的 JDBC 存储模块
  • PostgreSQL 流式传输的恰好一次传送
  • PostgreSQL 副本身份更改
  • Oracle RAC 改进

1.Debezium Server支持K8s

此版本引入了新 Debezium Operator 的预览版本,提供了在 Kubernetes 中部署和管理 Debezium Server 实例的能力。 Debezium Server 允许您将更改事件从数据源流式传输到各种消息传递基础设施。我们的目标是为希望利用 Kubernetes 实现可扩展性和高可用性部署的 Debezium 社区提供一种无 Kafka 的替代方案。

目前,由于operator处于早期孵化阶段,相关文档很少;然而,我们确实打算在即将到来的发布周期中对此进行改进。您可以在 github 存储库中找到自定义资源规范的部署示例和基本描述,您可以将其用作短期参考。

我们目前不建议将此组件进行生产部署;但是,我们鼓励用户提供社区反馈。这些反馈对于评估组件是否已准备好功能或是否仍有需要改进的地方来满足每个人的需求非常有价值。

2.新的通知子系统

Debezium 2.3 引入了一个名为通知的全新功能,允许 Debezium 发出可供任何外部系统使用的事件,以了解 Debezium 生命周期各个阶段的状态。

通知事件表示为一系列键/值元组,其结构包含多个开箱即用的字段。以下是一个简单通知事件的示例。

通知事件示例

{
  "id": "c485ccc3-16ff-47cc-b4e8-b56a57c3bad2",
  "aggregate_type": "Snapshot",
  "type": "Started",
  "additional_data": {
    ...
  }
}

每个通知事件由一个 id 字段、一个用于标识通知的 UUID、一个基于域驱动设计概念与通知相关的aggregate_type 字段、一个用于提供有关聚合类型本身的更多详细信息的 type 字段组成,以及一个可选的 extra_data 字段,该字段由基于字符串的键/值对的映射以及有关事件的附加信息组成。

目前 Debezium 支持两种通知事件类型:

  • 初始快照的状态
  • 增量快照监控

初始快照通知

初始快照是连接器首次启动时对现有数据的一致捕获。初始快照事件将具有值为“初始快照”的聚合类型,并且事件类型将由三个逻辑值之一组成:

  • SKIPPED:表示初始快照被跳过。
  • ABORTED:表示初始快照已中止。
  • COMPLETED:表示初始快照已成功结束。

以下是有关初始快照完成的通知示例:

快照完成事件示例

{
  "id": "5563ae14-49f8-4579-9641-c1bbc2d76f99",
  "aggregate_type": "Initial Snapshot",
  "type": "COMPLETED"
}

增量快照通知
增量快照是在连接器主动传输更改时从一组配置的表中捕获现有数据。增量快照事件将具有值为“增量快照”的聚合类型,并且该类型将由以下几个逻辑值之一组成:

  • STARTED:表示增量快照已开始。
  • PAUSED:表示增量快照已暂时暂停。
  • RESUMED:表示已暂停的增量快照现已恢复。
  • STOPPED:表示增量快照已停止。
  • IN_PROGRESS:指示增量快照正在进行中。
  • TABLE_SCAN_COMPLETED:指示给定表的增量快照已结束。
  • COMPLETED:表示所有表的增量快照已结束。

配置通知
Debezium 通知是通过连接器的配置进行配置的。以下示例展示了如何配置开箱即用的基于 Kafka 主题或日志的通道。

使用 Kafka 主题

{
  "notification.enable.channels": "sink",
  "notification.sink.topic.name": "debezium_notifications",
  ...
}

使用连接器日志

{
    "notification.enable.channels": "log"
}

3.新的可扩展信号子系统

自 Debezium 1.x 中引入增量快照功能以来,Debezium 就支持信号的概念。信号很重要,因为它允许您提供元数据来指示 Debezium 执行给定任务,无论该任务是向连接器日志写入条目还是执行临时增量快照。

在 Debezium 2.3 中,信号子系统经过重新设计,引入了称为通道的概念,它代表 Debezium 观察或收听信号并对信号做出反应的媒介。在以前的版本中,有一个跨连接器普遍支持的通道,即数据库信号表。在此版本中,这些渠道已统一,并且以下内容可供开箱即用:

  • 数据库信号表
  • Kafka信号主题
  • 文件系统
  • JMX

但这还不是全部,信号通道合约是可扩展的,允许您编写自定义实现并轻松地将其提供给您的连接器。

4.JMX 信号和通知集成

Debezium 2.3 之前引入了新的信号通道和通知功能。此功能允许外部应用程序轻松与 Debezium 集成,发送信号来执行各种任务(例如临时增量快照),并接收有关此类任务进度的通知。此版本建立在该功能之上,允许通过 JMX 发送信号和接收通知。

发送信号
在此版本中,信号通道子系统已得到改进,支持通过 JMX 发送信号。从 jconsole 窗口中,您现在可以看到连接器有两个新的小部分,即通知和信号部分,如下所示:

在这里插入图片描述
新的信号部分允许您调用 JMX bean 上的操作,以便将信号传输到 Debezium。该信号类似于逻辑信号表结构,它接受 3 个参数:唯一标识符、信号类型,最后是信号有效负载。下面说明了 jconsole 中的情况:
在这里插入图片描述
接收通知
新的通知部分允许您接收来自 Debezium 的 JMX bean 捕获的通知并做出反应。 Debezium JMX bean 将缓冲所有通知以确保不会错过任何通知。下面说明了 jconsole 中的情况:

在这里插入图片描述
JMX bean 不会自动清除通知队列。为了避免内存问题,请务必在处理完所有通知后调用通知 bean 上的重置方法。

我们期待您对这种通过 JMX 将信号和通知与 Debezium 集成的新方法提供反馈。

5.新的 JDBC 存储子系统

Debezium 2.3 引入了一种新的存储模块实现,支持通过 JDBC 在数据存储中持久保存模式历史记录和偏移数据。对于您可能无法轻松访问持久文件系统的环境,这提供了另一种通过远程持久存储平台进行存储的替代方案。

为了利用这个新模块,必须将以下依赖项添加到您的项目或应用程序中:

Maven坐标

<dependency>
    <groupId>io.debezium</groupId>
    <artifactId>debezium-storage-jdbc</artifactId>
    <version>2.3.0.Final</version>
</dependency>

以下示例展示了如何通过 JDBC 存储模块配置偏移量或架构历史记录存储:
Offset JDBC 存储配置示例:

{
  "offset.storage.jdbc.url": "<jdbc-connection-url>",
  "offset.storage.jdbc.user": "dbuser",
  "offset.storage.jdbc.password": "secret",
  "offset.storage.jdbc.offset_table_name": "debezium_offset_storage"
}

架构历史 JDBC 存储的配置示例

{
  "schema.history.internal.jdbc.url": "<jdbc-connection-url>",
  "schema.history.internal.jdbc.user": "dbuser",
  "schema.history.internal.jdbc.password": "secret",
  "schema.history.internal.jdbc.schema.history.table.name": "debezium_database_history"
}

6.PostgreSQL 流式传输的恰好一次传送

Debezium 传统上是一种至少一次交付解决方案,保证不会错过任何更改。 Exactly-Once 是 Apache Kafka 社区提出的一项提案。该提案旨在解决生产者(源连接器)的常见问题,当生产者重试时,它可能会重新向 Kafka 代理发送一批事件,即使该批次已经由代理提交。这意味着在某些情况下可能会发送重复的事件,并且并非每个消费者(接收器连接器)都能够轻松处理此类情况。

Debezium 计划以分阶段的方式推出一次性交付语义。快照和流媒体存在一些特定的极端情况,这些情况可能因连接器而异。就这样,Debezium 2.3 首先专门只在 PostgreSQL 的流阶段添加对一次语义的支持!

为了利用一次性交付,无需更改连接器配置;但是,您的 Kafka Connect 工作线程配置需要调整才能启用此功能。

如果您在同一个连接集群上混合支持和不支持精确一次传送的连接器,则您将无法在工作配置中将正好.once.support 设置为 required,因为这将导致不支持此功能的连接器启动时验证失败。

7.PostgreSQL 副本身份更改

Debezium 2.3 引入了一个新的 PostgreSQL 连接器功能,称为“自动设置副本身份”。

副本身份是 PostgreSQL 识别在数据库事务日志中捕获哪些列以进行插入、更新和删除的方法。这项新功能允许通过连接器配置来配置表的副本身份,并在启动时将设置此配置的责任委托给连接器。

新的配置选项replica.identity.autoset.values指定以逗号分隔的表和副本身份元组列表。如果表已经具有给定的副本标识,则该标识将被覆盖以匹配此配置中指定的内容(如果包含该表)。 PostgreSQL 支持多种副本身份类型。

指定replica.identity.autoset.values时,该值是一个以逗号分隔的值列表,其中每个元素使用<完全限定表名称>:<副本身份>的格式。下面显示了一个示例,其中两个表配置为具有完整副本标识:

{
  "replica.identity.autoset.values": "public.table1:FULL,public.table2:FULL"
}

8.Oracle RAC 改进

连接到 Oracle RAC 安装时,您必须指定 rac.nodes 配置属性,其中至少包含集群中所有单个节点的主机或 IP 地址。旧版本的连接器还支持多种格式,允许为每个节点包含一个端口,因为并非集群上的每个节点都可以使用相同的端口。

Debezium 2.3 还承认每个节点不一定使用相同的 Oracle 站点标识符 (SID),从而改进了 Oracle RAC 支持,因此,SID 现在也可以包含在 rac.nodes 配置属性中以支持此类安装。

以下示例说明了连接到两个 Oracle RAC 节点,每个节点使用不同的端口和 SID 参数:

配置示例

{
  "connector.class": "io.debezium.connector.oracle.OracleConnector",
  "rac.nodes": "host1.domain.com:1521/ORCLSID1,host2.domain.com:1522/ORCLSID2",
  ...
}

三、下一步

Debezium 2.4 计划进行大量更改,我们打算以分桶方式处理这些更改,每个桶都分配有一个优先级。与任何时间表一样,优先级可能会发生变化,但以下是预期内容的概述:

优先级1:

  • [核心]TimescaleDB单消息转换支持
  • [核心] 时区单消息转换以简化 Debezium 时间类型的使用
  • [核心] 初始快照通知
  • [MongoDB] 数据库范围的变更流支持
  • [MongoDB] 多任务部署指标支持
  • [Oracle] OpenLogReplicator 适配器支持
  • [Oracle] XML、LONG、RAW 和 LONG RAW 数据类型支持
  • [通用] 对其他连接器的 Exactly-Once 语义支持
  • [依赖项] Apache Kafka 3.5.x 支持

优先级2:

  • [运营商] Debezium 运营商的后续步骤
  • [核心] Ad-hoc 阻塞快照
  • [依赖项] 使用 OpenTelemetry

优先级3:

  • [嵌入式引擎] 并行化支持
  • [MongoDB] 并行增量快照支持
  • [MySQL] 并行模式快照支持

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

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

相关文章

优化伊通河漂流旅行方案的模型——JLU数学学院2020级数学模型期末大作业

文章目录 题目描述背景介绍模型假设问题一的模型决策树模型游客安全最大化与旅行次数最大化模型统筹考虑游客安全与旅行次数的模型模型对比 第二问的模型每天下水的脚踏游船与电动游船的比率的敏感性分析全是电动游船的情形全是脚踏游船的情形每天下水的脚踏游船与电动游船成比…

【深度学习笔记】神经网络概述

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。刚兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a;https://mo…

前端Vue自定义等宽标签栏标题栏选项卡

前端Vue自定义等宽标签栏标题栏选项卡&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13170 效果图如下&#xff1a; # cc-chooseTab #### 使用方法 使用方法 <!-- tabArr:标签数组 current&#xff1a;当前选择序…

Linux 实用操作技巧一

文章目录 Linux 实用操作技巧前言查找当前目录下所有 .gz 结尾的文件查找当前目录超过30天没有修改过且文件大于10M的.gz文件。将software 目录下大于 100k 的文件移动至 /tmp下 时间戳快速转换动态查看日志&#xff0c;并且停止获取内存、CPU、磁盘、IO等信息获取 公网 ip总结…

关于 SpringBoot 日志文件的知识

目录 日志有什么用&#xff1f; 日志怎么用&#xff1f; 自定义日志打印 在程序中得到日志对象 使用日志对象打印日志 日志格式 日志级别的分类与使用 日志级别设置 日志持久化 日志有什么用&#xff1f; 日志对于我们来说&#xff0c;最主要的用途就是排除和定位问题…

Java设计模式之行为型-模板方法模式

目录 一、概念 二、角色设计 三、代码实现 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执行某一方法的模板…

一种新颖的智能优化算法—飞蛾扑火优化(MFO)算法

飞蛾扑火优化(Moth-Flame Optimization,MFO)算法是Mirjalili于2015年提出的一种新型智能优化算法&#xff0c;其灵感来源于一种特殊的导航机制—横向定位导航,实现了勘探与开发的较好平衡以获得全局优化性能。MFO算法具有并行优化能力强&#xff0c;全局性优且不易落入局部极值…

VS安装中报“应用程序无法启动,因为应用程序的并行配置不正确”的解决办法

1.问题描述 安装应用程序的时候&#xff0c;提示“应用程序无法启动&#xff0c;因为应用程序的并行配置不正确”。 2.解决过程 方法一 开启服务 开始→ 运行&#xff08;输入services.msc或者服务&#xff09;→确定后打开服务&#xff1b;找到Windows Modules Installer服务…

Advanced Installer使用指南

PC打包软件有很多 我只推荐一个advanced Installer完全傻瓜式操作&#xff0c;直接点就行了。innoSetUp需要学习它的脚本语言&#xff0c;学习成本太高了&#xff0c;而且网上的学习资料也很少。其它东西 增加依赖 我的程序需要dotNet5.0.13的运行时环境。 但是在AI上面没有…

chatgpt赋能python:Python撤销和回退的完全指南:从基础到高级

Python撤销和回退的完全指南&#xff1a;从基础到高级 Python是一种强大的编程语言&#xff0c;但即使在最好的情况下&#xff0c;错误也会出现。在此时&#xff0c;撤销错误和回退操作会变得非常重要。本指南将介绍Python中的撤销和回退操作&#xff0c;从基础操作到高级操作…

SparkSQL之AstBuilder

Spark SQL是基于ANTLR实现的&#xff0c;前文中有关于ANTLR的介绍文章《ANTLR实战》和《设计模式之访问者模式》&#xff0c;这篇文章主要介绍的内容是AstBuilder类。 Catalyst中提供了直接面向用户的ParseInterface接口&#xff0c;该接口中包含了对SQL语句、Expression表达式…

DDD(领域驱动设计) 核心概念浅析

文章目录 DDD(领域驱动设计) 核心概念浅析前言贫血模型什么是贫血模型贫血模型的优点贫血模型的缺点 充血模型充血模型的优点充血模型的缺点 DP 概念抽象接口简单概念简单概念流程&#xff1a;实现 统一语言和模型价值DP 和 Entity 的区别 Aggregate&#xff08;聚合&#xff0…

HackTheBox - 学院【CPTS】复习1 - PASSWORD ATTACKS

前言 有一个月时间没发文章了&#xff0c;我在6月11号进入htb学院学习CPTS&#xff0c;在扎实的THM基础的加持下&#xff0c;我学的非常顺利&#xff0c;其实大部分内容都相当于复习&#xff0c;而学到的内容只是一些可能不太常见、又或者非常细节的小技巧&#xff0c;这也是非…

vscode 出现 No such file or directory 的解决办法(python tkinter)

问题 Traceback (most recent call last): File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 202, in w Window() File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 95, in init self.initWindo…

ThreadPoolExecutor源码剖析

ThreadPoolExecutor源码涉及到的内容比较多&#xff0c;需要一点点的去啃和查看… ThreadPoolExecutor的核心属性 ThreadPoolExecutor的核心属性主要就是CTL。基于CTL获取到线程池的状态以及工作线程个数。 ctl是一个int类型的整数&#xff0c;內部基于AtomicInteger&#xff0…

再谈StringBuilder为什么线程不安全以及带来的问题

1 缘起 比较有意思的是&#xff0c;学习锁消除的过程中&#xff0c;有人讲到StringBuffer在方法内构建&#xff0c;不会被其他方法引用时&#xff0c;StringBuffer的锁会被消除&#xff0c; 于是&#xff0c;顺便看了一下同源的StringBuidler为什么线程不安全&#xff0c;以及…

【无标题】TP-LINK XDR5470 WiFi6路由器 简单开箱评测

TL-XDR5470易展版AX5400双频WiFi6路由器 简单开箱测评&#xff0c;上次买的XDR6078覆盖不够&#xff0c;还是得每层再买一个&#xff0c;所以又买了个TL-XDR5470&#xff0c;支持易展mesh。 上次买的XDR6078没有外置FEM功放芯片&#xff0c;所以信号差了一点&#xff0c;得加2…

PE系统盘制作

目录 前言 制作PE盘的步骤如下 前言 PE盘是一个轻量级的系统&#xff0c;类似于Windows系统。当您的计算机无法进入Windows系统时&#xff0c;您可以通过启动PE盘来访问一个独立的操作系统&#xff0c;从而执行各种任务&#xff0c;例如拷贝重要文件或进行系统安装。PE盘通常…

win10查看端口是否被占用,被哪一个程序占用(图文)

window系统中有时候我们会出现需要的端口号被占用&#xff0c;但不知道具体是哪个程序占用的。这时我们需要找到使用此端口的程序。 方法如下&#xff1a; 1&#xff09;以管理员身份打开命令提示符窗口&#xff08;开始-运行&#xff09;。 2&#xff09;使用命令查看端口使…

R730直通Tesla P40显卡

本次讲述如何在R730的ESXi上&#xff0c;将Tesla P40直通到centos7.7和WinServer2016。使用直通模式&#xff0c;安装普通的驱动即可&#xff0c;不需要vGPU的驱动。 按计划本来后面要自己装一下系统、做RAID的&#xff0c;不过最近需要用到显卡&#xff0c;所以先把显卡安装上…