我们很高兴地宣布 Debezium 3.1 的第一个 Beta 版本,即 3.1.0.Beta1。
此版本包含大量新功能和改进,包括但不限于:首个官方发布的 Debezium Server UI、CloudEvent traceparent 支持、Debezium 的 PubSub 和 RabbitMQ sink 的新功能、WASM 转换中的 Schema 访问,以及更多内容。让我们深入了解所有这些新功能和改进。
新功能和改进
升级到 Debezium 3.1.0.Beta1 在多个组件中引入了若干新功能和改进。
Debezium Platform 的首次发布
一年前,我们开始了这项激动人心的旅程,为 Debezium Server 创建了一个新的、现代化的用户界面,旨在简化 Debezium 在 Kubernetes 上的部署。我们很高兴地宣布,Debezium 3.1 将是这项多年努力的第一个官方发布版本。
新的 Debezium Platform 提供了一种基于管道的现代化方法,可以在几秒钟内设计源和目标配置、转换链等。您可以使用 helm 如下方式安装 Debezium Platform:
helm install debezium-platform --set domain.url=<your-domain> --version 3.1.0-beta1 oci://quay.io/debezium-charts/debezium-platform 有关如何使用 helm 进行部署的更多详细信息,请参阅 README.md。
此外,此版本特别为用户界面添加了一些收尾工作,包括新的搜索/列表视图切换器、应用转换和编辑连接器管道的显示,以及在配置管道期间的面向经验丰富的用户的智能编辑器。
以下视频展示了如何使用这些新功能:
Percona 的最小化锁定
Debezium 为 MySQL Percona 用户添加了一个新的 snapshot.locking.mode,以减少快照期间发生的锁定量。新模式 minimal_percona_no_table_locks 提供了与 minimal_percona 相同的语义,但还省略了表级锁 (DBZ-8717)。这为在某些不允许表锁的环境中提供了一个替代方案。
Oracle 源信息 scn 和时间戳字段
Debezium 为 Oracle 更改事件的 source 信息块添加了几个新字段 (DBZ-8740),包括:
commit_ts_ms-
这指定了事件事务提交的时间(以毫秒为单位)。
start_scn-
这指定了事件事务中观察到的第一个事件的 SCN。
start_ts_ms-
这指定了用户修改的事件事务中第一个事件的时间(以毫秒为单位)。
这些新字段是可选的,因此模式注册表用户会发现这些更改是向后兼容的。
| Oracle SCN 值并非唯一,因此可能存在多个事件具有相同的 SCN 值和时间戳。在使用这些值进行任何类型的事件排序时应格外小心。 |
Vitess Epoch/Zero 日期列解析的更改
当 Vitess 值转换器发出设置为零日期值的日期列时,根据列的可选性,该字段可能显示为 null 或 Unix epoch。这对消费者应用程序来说是一个问题,因为它们无法区分当提供 epoch 值时,它是真正的 epoch 值还是哨兵值,因为该列在源中是零日期。
Debezium 3.1 为 Vitess 用户引入了一个新的配置属性 override.datetime.to.nullable。
默认值 false 继续使用旧行为发出日期列,即如果列不为 null,则使用 Unix epoch 而不是 null。这意味着消费者将继续无法区分这两种用例。
当设置为 true 时,所有日期和 datetime 列都将设置为可选,这意味着它们可以与 null 一起序列化,而无论列在源数据库中的可选性如何设置。这意味着,如果源系统中设置了零日期,连接器将始终使用 null 来表示此用例,而不再使用基于 epoch 的值,除非该字段被填充了实际的非零日期值。
Vitess 二进制排序的 tiny、medium 和 long 文本列的更改
在 Debezium 3.1.0.Alpha2 中,我们进行了一项更改,将 Vitess 二进制排序的 text、enum 和 set 列类型作为字符类型字段发出到更改事件中 (DBZ-8679)。不幸的是,这只覆盖了一部分列类型,在此版本中,我们已将其扩展到包括 tinytext、mediumtext 和 longtext 类型 (DBZ-8694)。
| 请注意,如果您使用模式注册表, |
CloudEvent traceparent 支持
Debezium 的 CloudEvents 支持已更新,增加了对 traceparent 属性的支持,该属性提供了与 OpenTelemetry 集成的能力,可以将跟踪详细信息作为事件的一部分进行传递 (DBZ-8669)。
通过将 opentelemetry.tracing.attributes.enabled 配置属性设置为 true,并包含 traceparent:header 作为 metadata.source 的一部分,这些信息将提供给 CloudEvents 转换器。
您可以通过更改默认值并指定适当标头中的字段值来定制转换器填充字段的方式。例如:
{
"value.converter.metadata.source": "value,id:header,type:header,traceparent:header,dataSchemaName:header"
} 您可以在 Debezium 的 CloudEvents 文档中找到其他示例。
WASM 转换中的模式访问支持
现在,您可以使用 WASM 转换在 TinyGo 程序中访问一些模式详细信息 (DBZ-8737)。已添加两个新方法来支持时间:GetSchemaName 和 GetSchemaType。
package main
import( "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 match
return debezium.SetBool(valueSchemaType == "dummy.Envelope" || opType == "string")
}
func main() {} | 我们欢迎您就如何改进 WASM 转换体验提供任何反馈。请通过我们的 Zulip 聊天联系我们,或在 Jira 上记录增强功能。 |
在 connect-base 镜像中条件性包含组件
Debezium 的 kafka 和 connect 镜像均派生自一个名为 connect-base 的通用镜像。默认情况下,此基础镜像会安装 Apicurio、Jolkia 和 OpenTelemetry 依赖项。这对于测试非常有用,但如果您希望将 Debezium 的镜像用作自己的基础,则在不必要时可能希望省略这些依赖项。
connect-base 镜像现在可以条件性地省略这些依赖项中的任何一个 (DBZ-8709)。可以将 OTL_ENABLED、APICURIO_ENABLED 和 JOLOKIA_ENABLED 环境变量设置为 no,以在构建镜像时省略这些依赖项,从而减小镜像的占地空间。
|
|
PubSub sink 支持并发和压缩
为了提高 Google PubSub 的吞吐量和容量,我们引入了指定 PubSub 若干新配置属性以支持并发和压缩的能力 (DBZ-8715)。这些新的配置属性可用于任何现有的 PubSub 配置。
pubsub.concurrency.threads-
这指定了用于向 Google PubSub 发布消息的线程数。这可用于扩展或限制 Google PubSub 客户端库创建的 PubSub 线程数。默认情况下,PubSink 使用客户端库的默认行为。
pubsub.compression.threshold.bytes-
当设置为
0或更大的值时,PubSub sink 会启用可选的压缩来将事件批次传输到 PubSub 端点。是否使用压缩由提供的阈值定义。如果批次的总字节数小于阈值,则不使用压缩。如果批次的总字节数等于或大于阈值,则使用压缩。
PubSub sink 支持区域端点
在使用 PubSub sink 时,对于可能需要与位置特定(即区域)端点交互的生产系统,pubsub.address 通常不足以满足需求。为解决此问题,Debezium 3.1 引入了一个新的配置属性 pubsub.region (DBZ-8735)。
新的 pubsub.region 属性允许指定要连接的 Google Cloud 区域,例如 us-central1 或 asia-northeast1。指定后,Debezium 将使用 PubSub 的特定于位置的端点,格式为 <region>-pubsub.googleapis.com:443。这允许连接到特定于位置的端点而不是全局端点。
|
|
RabbitMQ sink 支持基于键的路由
在 Debezium 3.1 中,我们改变了您通过配置路由事件的方式。这种新方法采用基于策略的设计,保留了旧的行为并引入了新的基于键的路由机制 (DBZ-8752)。
首先,rabbitmq.routingKeyFromTopicName 已弃用,将在未来版本中删除。此功能已合并到新的 rabbitmq.routingKey.source 配置属性中,可以设置为以下值之一
static-
当使用静态路由源时,RabbitMQ Sink 将使用您在 Sink 配置中指定的
rabbitmq.routingKey静态值。由于此值在配置中设置,并且仅在 Sink 启动期间读取,因此该值是静态的,在 Sink 运行时不会改变。 topic-
当使用主题路由源时,RabbitMQ Sink 将根据目标主题名称源化路由键。此模式取代了旧的
rabbitmq.routingKeyFromTopicName配置属性行为,该属性现已弃用。 key-
当使用新的键路由源时,RabbitMQ Sink 将根据事件的记录键源化路由键。这提供了灵活性,可以通过使用自定义转换在将事件发送到 RabbitMQ 之前更改事件键,来控制 RabbitMQ 的路由机制,使用原始 Debezium 更改事件的键。
其他更改
以下是 3.1.0.Beta1 中的一些值得注意的更改:
-
SQL Server 连接器无法升级到 2.0 DBZ-5845
-
JDBC sink 连接器不会从 postgres 数据库表中删除行 DBZ-8287
-
MariaDB 适配器在 ALTER USER 语句上失败 DBZ-8436
-
表达式导致 Percona SEQUENCE_TABLE 函数的 SQL 解析器异常 DBZ-8559
-
大量表导致 Debezium 启动缓慢 DBZ-8595
-
当遇到 Pub/Sub 的消息传递超时时,Debezium 未正确关闭 DBZ-8672
-
阻塞快照后流连接出现断管(Postgres) DBZ-8680
-
在发布管道中支持 Debezium Platform DBZ-8682
-
为打包 helm charts 创建管道并在 quay.io 上发布 DBZ-8706
-
source 中的 ts_ms 可能默认为 0 而不是 Instant.now() DBZ-8708
-
PDB 数据库名称默认为大写 DBZ-8710
-
使用 DEFAULT ON NULL 子句时,Alter table modify column 失败 DBZ-8720
-
ExtractChangedRecordState SMT 现在可以处理带有默认值的字段 DBZ-8721
-
Oracle RAC 节点重启会导致 redo 线程无限期不一致 DBZ-8724
-
指定非零值的 archive.log.hours 会生成错误的 SQL DBZ-8725
-
debezium/connect docker 镜像在 arm64 上不可用 DBZ-8728
-
创建管道来运行发布 DBZ-8731
-
Debezium Server:Nats 消费者因二进制序列化而崩溃 DBZ-8734
-
更新测试计算 MariaDB 驱动程序 3.5 的默认时区时间的方式 DBZ-8742
-
MariaDB 的 schema.history.internal.skip.unparseable.ddl 可能存在问题 DBZ-8745
-
Oracle 快照的 source.ts 未考虑数据库时区差异 DBZ-8749
-
将 assertj-core 升级到 3.27.3 DBZ-8751
非常感谢社区中所有辛勤工作于此次发布的贡献者:Alvar Viana、Andrea Peruffo、Chris Cranford、Indra Shukla、Jakub Cechacek、James Johnston、Jiri Pechanec、Katerina Galieva、Krzysztof Grzechnik、Mario Fiore Vitale、Michael Cambria、Minjae Lee、Minjae Lee、Nathan Smit、Rodolphe Quiedeville、Roman Kudryashov、Thomas Thornton、Victor Castaño、Vojtech Juranek、Yannick Eisenschmidt、Zhongqiang Gong、kesompochy 和 حمود سمبول!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。