Debezium日常分享系列之:Debezium 3.1.0.Alpha2发布
模式历史配置默认值的变更
- 关于
schema.history.internal.store.only.captured.databases.ddl
的文档提供了一个错误的默认值。虽然这不是一个特定于代码的破坏性变更,但应该花点时间重新评估部署配置是否依赖于不同的默认值。
可能的 Vitess 数据丢失
- Debezium for Vitess 连接器自五年前首次引入以来存在一个罕见但关键的数据丢失 bug。如果主键更新是事务中的最后一个操作,记录可能会丢失。此 bug 影响所有之前的版本。强烈建议用户立即更新到 3.1.Alpha2 或更高版本以解决这一潜在的数据丢失问题。
Oracle 的 ReselectColumnsPostProcessor 行为变更
- ReselectColumnsPostProcessor 的行为已更改,Oracle LOB 列将无论
lob.enabled
配置属性的值如何都会被重新选择。此变更使得那些在流式传输时不想提取 LOB 列的用户仍然可以通过列重新选择过程来填充 LOB 列。
Reselect 列后处理器的错误处理模式
ReselectColumnsPostProcessor 被设计用于补充流式传输过程,根据连接器配置查询需要重新选择的特定列的当前值。此过程旨在无缝进行,如果查询失败,将使用流式传输的列数据作为最后的手段。
以下配置属性已添加:
reselect.error.handling.mode
- 指定在重新选择查询失败时如何处理错误。将此设置为
warn
时,重新选择查询失败会记录警告,并将流式传输的事件数据原样传递。将此设置为fail
时,重新选择查询失败会抛出异常。
reselect.error.handling.mode
的默认值为 warn
,以保持旧的预期行为。
TinyGo WASM 数据类型改进
Debezium 的脚本转换解决方案提供了使用 Go 编写脚本并将 TinyGo 程序编译为 WebAssembly 的能力。ChicoryEngine 运行时已得到改进,现在支持访问和处理 Struct、Map 和 Array 等 Kafka 模式类型。此外,还增加了对更多具体类型(如 Int8、Int16、Int32、Int64、Float32、Float64、Bool 和 Bytes)的访问器支持。
Go 中的简单过滤程序
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 平台转换 UI 中的谓词支持
团队一直在努力改进新的和即将推出的 Debezium 管理平台,这是一个用于在 Kubernetes 上部署 Debezium 的现代化管理界面。
在此次发布中,我们很高兴地宣布,我们已经在单消息转换界面中添加了定义谓词的支持。以下是该新界面的快速预览。
Debezium 平台的每日构建容器镜像可用
我们已经开始发布 Debezium 管理平台的每日构建镜像,这是一个用于在 Kubernetes 上部署 Debezium 的现代化管理界面。
- 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
获取该镜像。
新的 Oracle LogMiner JMX 指标
Debezium Oracle 连接器新增了一个 JMX 指标 MinedLogFileNames
。正如其名称所示,该指标返回一个包含当前 LogMiner 会话中已添加的日志文件名的字符串数组(String[]
)。此列表表示连接器当前正在读取的所有日志文件名。
当用户报告流式传输变化时,我们首先检查的一项内容是当前挖掘会话中包含的日志数量。如果添加了异常多的日志,这可能会在 Oracle LogMiner 从磁盘读取所有这些日志时造成瓶颈。
此指标提供了无需调整连接器日志级别的日志数量可见性。如果您观察到延迟,首先需要检查此指标中包含的日志数量。
大量日志通常表明您的数据库上可能有一个高突发活动窗口。
Vitess 将使用二进制排序的字符串类型视为字符串
在早期的变更中,Vitess 连接器进行了修改,将具有二进制排序的 varchar 列类型序列化为 Kafka 字符串类型。然而,其他字符驱动的数据类型如 text、enum 和 set 被忽略了,这些类型继续被序列化为字节数组。
在 Debezium 3.1 中,我们对这一行为进行了统一,使得 text、enum 和 set 类型在列使用二进制排序时也始终作为 Kafka 字符串类型发出。
请注意,如果您使用了模式注册表,text、enum 和 set 列类型在使用二进制排序时序列化方式的改变可能会引入模式向后兼容性问题。