我们很高兴地宣布 Debezium 3.1 的下一个预发布版本,即 3.1.0.Alpha2。此版本包含一些重大更改、新功能和改进。
重大变更
任何新软件的重大版本发布,通常都会伴随一些破坏性更改。 Debezium 3.1.0.Alpha2 版本也不例外,所以让我们来讨论一下您应该注意的主要更改。
Schema 历史配置默认值更改
schema.history.internal.store.only.captured.databases.ddl 的文档提供了错误的默认值。虽然这不是一个代码级别的破坏性更改,但您应该花些时间重新评估您的部署配置是否依赖于不同的默认值(DBZ-8558)。
Vitess 可能的数据丢失
Debezium for Vitess 连接器存在一个罕见但严重的 bug,自五年前首次引入以来一直存在,可能导致数据丢失。如果主键更新是事务中的最后一个操作,记录可能会丢失。此 bug 影响所有先前版本。强烈建议用户立即更新到 3.1.Alpha2 或更高版本以解决此潜在的数据丢失问题(DBZ-8594)。
删除了多个 Oracle LogMiner JMX 指标
Debezium 2.6 中已弃用一些 Oracle LogMiner JMX 指标,并用新指标替换。以下是被删除的 JMX 指标:
| 已删除的 JMX 指标 | 注意 |
|---|---|
| 替换为 |
| 替换为 |
| 替换为 |
| 替换为 |
| 替换为 |
| 替换为 |
| 替换为 |
| 替换为 |
| 已删除,无替换项。 |
请务必审查您的监控和可观测性基础架构,并在您仍依赖任何已弃用的指标时进行相应调整(DBZ-8647)。
Oracle 的 Reselect 列后处理器行为已更改
ReselectColumnsPostProcessor 的行为已更改,Oracle LOB 列将被重新选择,无论 lob.enabled 配置属性的值如何。此更改使用户在不想在流式传输时挖掘 LOB 列的情况下,仍然可以通过列重新选择过程填充 LOB 列作为替代(DBZ-8653)。
新功能和改进
升级到 Debezium 3.1.0.Alpha2 在多个组件中引入了多项新功能和改进。
Reselect 列后处理器的错误处理模式
ReselectColumnsPostProcessor 旨在补充流式传输过程,根据连接器配置查询需要重新选择的特定列的当前值。此过程旨在无缝进行,如果查询失败,将使用流式传输的列数据作为最后的手段。
已添加以下配置属性:
reselect.error.handling.mode-
指定如何处理 reselect 查询失败时的错误。通过将其设置为
warn,当 reselect 查询失败时将记录警告,并按原样传递流式传输的事件数据。通过将其设置为fail,当 reselect 查询失败时,连接器将抛出异常。
reselect.error.handling.mode 的默认值为 warn,以保留旧的预期行为(DBZ-8336)。
TinyGo WASM 数据类型改进
Debezium 的脚本转换解决方案提供了使用 Go 编写脚本的能力,并将 TinyGo 程序编译成 WebAssembly。 ChicoryEngine 运行时已得到改进,现在包括对访问和使用 Struct、Map 和 Array Kafka schema 类型的支持。此外,还增加了对更具体类型(如 Int8、Int16、Int32、Int64、Float32、Float64、Bool 和 Bytes)的访问器。
package main
import ( "gihub.com/debezium/debezium-smt-go-pdk" )
//export process
func process(proxyPtr uint32) uint32 {
var op = debezium.GetString(debezium.Get(proxyPtr, "value.op"))
var beforeId = debezium.GetInt8(debezium.Get(proxyPtr, "value.before.id")) // Uses new GetInt8
// value.op != 'd' || value.before.id != 2
return debezium.SetBool(op != "d" || beforeId != 2)
}
func main() {} Debezium Platform Transformation UI 中的谓词支持
团队一直在努力改进新的、即将推出的 Debezium Management Platform,这是一个用于 Kubernetes 上 Debezium 部署的现代化管理界面。
在此版本中,我们很高兴地宣布,我们已在单条消息转换接口中添加了对定义 *谓词* 的支持。下面是此新接口的快速预览(DBZ-8590)。
Debezium Platform 夜间构建容器镜像可用
我们已经开始发布 Debezium Management Platform 的*夜间*构建镜像,这是一个用于 Kubernetes 上 Debezium 部署的现代化管理界面(DBZ-8603)。
quay.io/debezium/platform-conductor:nightly-
后端服务,提供管理 API,用于在 Kubernetes 上编排和控制 Debezium 部署。可以使用
docker pull quay.io/debezium/platform-conductor:nightly获取该镜像。 quay.io/debezium/platform-stage:nightly-
前端,提供用户界面,用于与基于 conductor 的后端进行交互。可以使用
docker pull quay.io/debezium/platform-stage:nightly获取该镜像。
有关更多信息,请参阅 README.md。
| 虽然这些容器*不适用于生产环境*,但它们是探索 Debezium Management Platform 的绝佳方式。我们对此新组件感到非常兴奋,并希望能听到您的反馈。 |
新的 Oracle LogMiner JMX 指标
Debezium Oracle 连接器中添加了一个新的 JMX 指标 MinedLogFileNames。顾名思义,此指标返回一个字符串数组 (String[]),其中包含已添加到当前 LogMiner 会话中的日志文件名。此列表代表连接器当前正在读取的所有日志文件名(DBZ-8644)。
| 当用户报告流式传输更改延迟时,我们首先检查的内容之一是查看有多少日志参与了挖掘会话。当添加大量日志时,这可能会在 Oracle LogMiner 从磁盘读取所有这些日志时造成瓶颈。 此指标无需调整连接器的日志级别即可提供对被挖掘日志数量的可见性。如果观察到延迟,首先要做的是检查此指标中有多少日志。 大量的日志通常表明您的数据库可能存在高爆发活动窗口。 |
Vitess 将具有二进制排序规则的字符串类型视为字符串
在之前的 DBZ-6748 更改中,对 Vitess 连接器进行了一项更改,以将具有二进制排序规则的 varchar 列类型序列化为 Kafka 字符串类型。然而,其他字符驱动的数据类型,如 text、enum 和 set 被忽略了,它们继续被序列化为字节数组。
在 Debezium 3.1 中,我们统一了此行为,以便 text、enum 和 set 类型始终作为 Kafka 字符串类型发出,即使该列使用二进制排序规则(DBZ-8679)。
| 请注意,如果您使用 Schema Registry, |
其他更改
以下是 3.1.0.Alpha2 中一些值得注意的更改:
-
将 MySQL 和 MariaDB 的语法与上游版本保持一致 DBZ-8270
-
在 conductor 中添加转换和谓词支持 DBZ-8459
-
减小的记录缓冲区无法处理具有主键字段的 RECORD_VALUE DBZ-8593
-
使用混合挖掘策略时,具有生成列的表事件会失败 DBZ-8597
-
更改 Schema History producer 配置 DBZ-8598
-
ANTLR DDL 解析错误 DBZ-8600
-
将 Debezium Server 和 Operator 更新到 Quarkus 3.15.3 LTS DBZ-8601
-
MySQL master 和 replica 镜像启动失败 DBZ-8633
-
删除关于撤销更改失败的误导性日志条目 DBZ-8645
-
Oracle 指标 OldestScnAgeInMilliseconds 未考虑数据库时区 DBZ-8646
-
使用 RECORD_VALUE 与 DELETE 事件会导致 NullPointerException DBZ-8648
-
下游 JDBC 系统测试失败 DBZ-8651
-
批次大小计算错误地使用了 min-batch-size DBZ-8652
-
MySQL 复制示例镜像不起作用 DBZ-8655
-
Oracle 在事务包含大量约束冲突时性能下降 DBZ-8665
-
为 Postgres 容器镜像将 protoc 从 1.4 升级到 1.5 DBZ-8670
-
上游系统测试失败 DBZ-8678
-
跳过具有等于 0 的 redo 线程的提交的空事务 DBZ-8681
-
DDL 语句无法解析:GRANT SENSITIVE_VARIABLES_OBSERVER DBZ-8685
-
SQL Server - 与 Schema 验证相关的错误应提供更多详细信息 DBZ-8692
-
禁用 PostgreSQL 的 ARM 镜像 DBZ-8713
非常感谢所有为这次发布辛勤工作的社区贡献者:Alvar Viana Gomez, Andrea Peruffo, Anisha Mohanty, Chris Cranford, Gaurav Miglani, Henk van Dyk, Indra Shukla, Jiri Pechanec, Julien Roy, Katerina Galieva, Krzysztof Grzechnik, Mario Fiore Vitale, Naresh Gandi, Rajendra Dangwal, Robert Roldan, Rodolphe Quiedeville, Thomas Thornton, Vojtěch Juránek,以及 ismail simsek!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。