Debezium日常分享系列之:Debezium 3.1.0.Beta1发布

devtools/2025/3/16 3:45:26/

Debezium日常分享系列>Debezium日常分享系列之:Debezium 3.1.0.Beta1发布

  • 新特性和改进
    • Debezium 平台的首次发布
    • Percona 的最小锁定
    • 新的 Oracle 源信息 SCN 和时间戳字段
    • Vitess Epoch/零日期列解析的变化
    • Vitess 二进制排序的 tiny、medium 和 long 文本列的变化
    • CloudEvent traceparent 支持
    • WASM 转换中的模式访问支持
    • 条件性包含 connect-base 镜像中的组件
    • PubSub 源支持并发和压缩
    • PubSub 源支持区域性端点
    • RabbitMQ 源支持基于键的路由

此版本包含了许多特性和改进,包括但不限于 Debezium Server UI 的首个官方发布、CloudEvent traceparent 支持、Debezium 的 PubSub 和 RabbitMQ 源的新功能、WASM 转换中的模式访问,以及许多其他特性。让我们深入了解这些新特性和改进。

新特性和改进

升级到 Debezium 3.1.0.Beta1 在多个组件中引入了若干新特性和改进:

Debezium__9">Debezium 平台的首次发布

一年前,我们开始了这一令人难以置信的旅程,旨在为 Debezium Server 创建一个现代化的用户界面,以简化在 Kubernetes 上部署 Debezium 的过程。我们很高兴地宣布,Debezium 3.1 将是这一多年努力的首个官方发布版本。

新的 Debezium 平台提供了一种基于现代管道的方法,可以在几秒钟内设计源和目标配置、转换链等。可以使用 Helm 按如下方式安装 Debezium 平台

helm install debezium-platform --set domain.url=<your-domain> --version 3.1.0-beta1 oci://quay.io/debezium-charts/debezium-platform

此外,此版本特别为用户界面添加了一些最终的完善功能,包括新的搜索/列表视图切换、显示应用的转换和编辑连接器管道,以及在配置管道时为有经验的用户提供智能编辑器。

Percona 的最小锁定

为 MySQL Percona 用户,Debezium 添加了一个新的 snapshot.locking.mode,以减少在快照过程中发生的锁定量。新的模式 minimal_percona_no_table_locks 与 minimal_percona 提供相同的语义,但额外省略了表级锁定。这为一些不允许表锁定的环境提供了一个替代方案。

新的 Oracle 源信息 SCN 和时间戳字段

Debezium 为 Oracle 变更事件的源信息块添加了几个新字段,包括:

  • commit_ts_ms这指定了事件的事务提交的时间(以毫秒为单位)。
  • start_scn这指定了事件的事务中观察到的第一个事件的 SCN。
  • start_ts_ms这指定了事件的事务中第一个事件由用户更改的时间(以毫秒为单位)。

这些新字段是可选的,因此使用模式注册表的用户应发现这些更改是向后兼容的。

Oracle 的 SCN 值不是唯一的,因此多个事件可能具有相同的 SCN 值和时间戳。在使用这些值进行任何类型的事件排序时应谨慎。

Vitess Epoch/零日期列解析的变化

当 Vitess 值转换器发出一个设置为零日期值的日期列时,根据列的可选性,该字段可能会被发出为 null 或 Unix 元年。这为消费者应用程序创建了一个问题,因为它们无法区分元年值是真正的元年值还是因为源列是零日期而产生的哨兵值。

Debezium 3.1 为 Vitess 用户引入了一个新的配置属性:override.datetime.to.nullable。

默认值为 false,继续使用旧的行为发出日期列,即如果列不为 null,则使用 Unix 元年而不是 null。这意味着消费者将继续无法区分这两种情况。

当设置为 true 时,所有日期和 datetime 列都被设为可选,这意味着无论源数据库中列的可选性如何设置,它们都可以被序列化为 null。这意味着如果源系统中设置了一个零日期,连接器将始终使用 null 来表示这种情况,而不再使用基于元年的值,除非字段被填充了一个实际的非零日期值。

Vitess 二进制排序的 tiny、medium 和 long 文本列的变化

Debezium 3.1.0.Alpha2 中,我们引入了一个更改,将 Vitess 二进制排序的文本、枚举和集合列类型作为字符类型字段在变更事件中发出。这不幸地只涵盖了部分列类型,而在此次发布中,我们扩展了这一范围,包括 tinytext、mediumtext 和 longtext 类型)。

请注意,如果使用模式注册表,二进制排序的文本、tinytext、mediumtext、longtext、枚举和集合列类型在序列化方式上的变化可能会引入模式的向后兼容性问题。

CloudEvent traceparent 支持

Debezium 的 CloudEvents 支持已更新,增加了对 traceparent 属性的支持,这使得可以与 OpenTelemetry 集成,将跟踪详细信息作为事件的一部分传递。

通过将 opentelemetry.tracing.attributes.enabled 配置属性设置为 true,并在 metadata.source 中包含 traceparent:header,这些信息将被提供给 CloudEvents 转换器。

可以自定义转换器填充字段的方式,通过更改默认值并指定相应头部中的字段值。例如:

{"value.converter.metadata.source": "value,id:header,type:header,traceparent:header,dataSchemaName:header"
}

WASM 转换中的模式访问支持

现在,您可以使用 WASM 转换来在 TinyGo 程序中访问一些模式细节。新增了两个方法来支持时间:GetSchemaName 和 GetSchemaType。

TinyGo 模式访问器示例:

package mainimport( "githu.com/debezuim/debezium-smt-go-pdk" )//export process
func process(proxyPtr uint32) uint32 {var valueSchemaType = debezium.GetSchemaName(debezium.Get(proxyPtr, "valueSchema"))var opType = debezium.GetSchemType(debezium.Get(proxyPtr, "valueSchema.op"))// Filter where schema type or opType matchreturn debezium.SetBool(valueSchemaType == "dummy.Envelope" || opType == "string")
}func main() {}

条件性包含 connect-base 镜像中的组件

Debezium 的 kafka 和 connect 镜像都源自一个名为 connect-base 的单一通用镜像。默认情况下,这个基础镜像会安装 Apicurio、Jolokia 和 OpenTelemetry 依赖。这对于测试目的非常有用,但如果您希望使用 Debezium 的镜像作为自己项目的基镜像,可能希望在这些依赖对您的环境不必要时将其省略。

现在,connect-base 镜像可以有条件地省略这些依赖。可以通过将 OTL_ENABLED、APICURIO_ENABLED 和 JOLOKIA_ENABLED 环境变量设置为 no,在构建镜像时省略这些依赖,从而创建更小的镜像。

默认情况下,connect-base 镜像将继续安装这些依赖,因此开箱即用时镜像的行为不会发生变化

PubSub 源支持并发和压缩

为了提高与 Google PubSub 的吞吐量和容量,我们引入了几个新的配置属性,以支持 PubSub 的并发和压缩。这些新的配置属性可以在任何现有的 PubSub 配置中使用。

pubsub.concurrency.threads
这指定了用于向 Google PubSub 发布消息的线程数。这可以用来扩展或限制由 Google PubSub 客户端库创建的 PubSub 线程数量。默认情况下,PubSink 使用客户端库的默认行为。

pubsub.compression.threshold.bytes
当设置为 0 或更大的值时,PubSub 源启用可选的压缩,以传输事件批次到 PubSub 端点。是否使用压缩由提供的阈值定义。如果批次的总字节数小于阈值,将不使用压缩。如果批次的总字节数等于或大于阈值,则使用压缩。

PubSub 源支持区域性端点

在使用 PubSub 源时,pubsub.address 通常不足以满足生产系统中可能需要与特定地区(即区域)端点交互的需求。为了解决这一问题,Debezium 3.1 引入了一个新的配置属性,pubsub.region。

新的 pubsub.region 属性允许指定要连接的 Google Cloud 区域,例如 us-central1 或 asia-northeast1。指定后,Debezium 将使用格式为 <‍region‍>-pubsub.googleapis.com:443 的区域性端点。这使得可以连接到特定区域的端点,而不是全局端点。

pubsub.region 和 pubsub.address 配置属性是互斥的。如果在配置中提供了 pubsub.address,pubsub.region 将被忽略。

RabbitMQ 源支持基于键的路由

Debezium 3.1 中,我们改变了使用配置路由事件的方式。这一新方法采用了基于策略的设计,保留了旧的行为并引入了新的基于键的路由机制。

首先,rabbitmq.routingKeyFromTopicName 已被弃用,并将在未来的版本中移除。此功能已合并到新的 rabbitmq.routingKey.source 配置属性中,可以设置为以下值之一:

static
使用静态路由源时,RabbitMQ 源将使用在 sink 配置中指定的 rabbitmq.routingKey 静态值。由于此值在配置中设置并在 sink 启动时读取,因此该值在整个运行期间保持不变。

topic
使用主题路由源时,RabbitMQ 源将根据目标主题名称生成路由键。此模式替换了旧的 rabbitmq.routingKeyFromTopicName 配置属性行为,该属性现已弃用。

key
使用新的键路由源时,RabbitMQ 源将根据事件的记录键生成路由键。这提供了灵活性,可以控制 RabbitMQ 使用原始的 Debezium 变更事件的键,或者在将事件发送到 RabbitMQ 之前通过自定义转换来更改事件的键。


http://www.ppmy.cn/devtools/167449.html

相关文章

Safe “AI Agentathon 2025”:加密领域的 AI Agent 开发者盛会

上月&#xff0c;来自全球的开发者齐聚 Safe Agentathon——加密领域规模最大的 AI Agent 主题开发者活动。该活动最初以 20 万美元奖金启动&#xff0c;最终总奖金池迅速扩大至 52 万美元&#xff0c;其中包括来自亚马逊云服务&#xff08;AWS&#xff09;的 15 万美元专项奖金…

Android Dagger2 框架依赖图构建模块深度剖析(三)

一、引言 在 Android 开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种重要的设计模式&#xff0c;它能够降低代码的耦合度&#xff0c;提高代码的可测试性和可维护性。Dagger 2 作为一款高效的依赖注入框架&#xff0c;在编…

c_cpp_properties.json等三个文件解释

不建议太小白的人看啊 在 Visual Studio Code 中使用 C 语言进行编程时&#xff0c;通常会看到一些特定的配置文件。这些文件是用来帮助你配置开发环境、调试程序等 就是这三个文件 首先是c_cpp_properties.json&#xff1a; 这是 Visual Studio Code 配置 C/C 开发环境的文件。…

[目标检测] 训练之前要做什么

背景&#xff1a;训练一个Yolo8模型&#xff0c;在训练之前&#xff0c;数据集的处理是影响效果的关键因素。 Step1 定义规则 什么是人/车&#xff0c;比如人的话可能是站着的人&#xff0c;如果是骑电动车/自行车就不算是人。 Step2 收集数据集 1. 自己标注。如果是自己标…

机器人触觉的意义

机器人触觉的重要性 触觉在机器人领域至关重要&#xff0c;尤其是在自主操作、精细操控、人机交互等方面。虽然视觉和语音技术已高度发展&#xff0c;但机器人在现实世界中的操作仍然受限&#xff0c;因为&#xff1a; 视觉有局限性&#xff1a;仅凭视觉&#xff0c;机器人难…

碰一碰发视频源码搭建,碰一碰发视频私有化部署,碰一碰发视频OEM贴牌

引言 随着移动互联网的快速发展&#xff0c;短视频应用成为了用户日常娱乐和信息获取的重要方式。碰一碰发视频功能作为一种新颖的交互方式&#xff0c;能够通过设备之间的简单触碰实现视频的快速分享。本文将详细介绍如何搭建碰一碰发视频的源码&#xff0c;并进行私有化部署…

解决跨域问题的6种方案

解决跨域问题&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是 Web 开发中常见的需求&#xff0c;以下是 6 种主流解决方案&#xff0c;涵盖前端、后端和服务器配置等不同层面&#xff1a; 一、CORS&#xff08;跨域资源共享&#xff09; 原理 通过服务器设置…

贪心算法简介(greed)

前言&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每个决策阶段都选择当前最优解的算法策略&#xff0c;通过局部最优的累积来寻求全局最优解。其本质是"短视"策略&#xff0c;不回溯已做选择。 什么是贪心、如何来理解贪心(个人对贪心的…