我非常高兴地宣布 Debezium 1.2.0.Beta1 发布!
此版本为 SQL Server、Db2 和 Oracle 连接器带来了面向用户的模式更改 topic,一个用于基于内容的内容变更事件路由的新消息转换,对 Postgres 的一系列数组列类型支持,以及更多内容。我们还将 Debezium 的 Apache Kafka 和 Kafka Connect 容器镜像升级到了 2.5.0 版本。
正如它是对生活中所有问题的答案一样,此版本修复的问题数量是 正好 42 个!
Schema Change Topics(模式变更主题)
与 MySQL 连接器类似,Debezium 的 SQL Server、Db2 和 Oracle 连接器现在也支持可选地公开一个包含模式变更信息的公共主题。与连接器内部的历史主题不同,模式变更主题旨在供感兴趣的客户端消费,例如,允许为下游数据存储填充模式。
模式信息以类型化结构进行传播,从而使消费者无需解析数据库特定的 DDL 语句。例如,下面是一个由 SQL Server 连接器生成的、用于创建 Debezium 教程中 customers 表的模式事件,并使用了 JSON 消息转换器。
{
"source": {
"version": "1.2.0.Beta1",
"connector": "sqlserver",
"name": "server1",
"ts_ms": 1588252618953,
"snapshot": "true",
"db": "testDB",
"schema": "dbo",
"table": "customers",
"change_lsn": null,
"commit_lsn": "00000025:00000d98:00a2",
"event_serial_no": null
},
"databaseName": "testDB",
"schemaName": "dbo",
"ddl": null,
"tableChanges": [
{
"type": "CREATE",
"id": "\"testDB\".\"dbo\".\"customers\"",
"table": {
"defaultCharsetName": null,
"primaryKeyColumnNames": [
"id"
],
"columns": [
{
"name": "id",
"jdbcType": 4,
"nativeType": null,
"typeName": "int identity",
"typeExpression": "int identity",
"charsetName": null,
"length": 10,
"scale": 0,
"position": 1,
"optional": false,
"autoIncremented": false,
"generated": false
},
{
"name": "first_name",
"jdbcType": 12,
"nativeType": null,
"typeName": "varchar",
"typeExpression": "varchar",
"charsetName": null,
"length": 255,
"scale": null,
"position": 2,
"optional": false,
"autoIncremented": false,
"generated": false
},
{
"name": "last_name",
"jdbcType": 12,
"nativeType": null,
"typeName": "varchar",
"typeExpression": "varchar",
"charsetName": null,
"length": 255,
"scale": null,
"position": 3,
"optional": false,
"autoIncremented": false,
"generated": false
},
{
"name": "email",
"jdbcType": 12,
"nativeType": null,
"typeName": "varchar",
"typeExpression": "varchar",
"charsetName": null,
"length": 255,
"scale": null,
"position": 4,
"optional": false,
"autoIncremented": false,
"generated": false
}
]
}
}
]
} 要了解更多关于模式变更主题的信息,请参阅特定连接器的文档,例如 SQL Server。请注意,此功能目前处于孵化状态,这意味着例如事件格式的细节在未来版本中可能会根据我们从社区收到的反馈而发生变化。
Content-Based Topic Routing(基于内容的路由主题)
使用新的单消息转换 (SMT) 基于内容的路由主题,您可以根据列值来控制特定变更事件发送到的主题。例如,考虑一个名为 purchase_orders 的数据库表,其中包含两种类型的订单:B2B 和 B2C。它们的变更事件应发送到 Apache Kafka 中各自类型的不同主题。为此,可以使用 JavaScript 或 Groovy 等语言的简单脚本表达式。
...
transforms=route
transforms.route.type=io.debezium.transforms.Filter
transforms.route.language=jsr223.graal.js
transforms.route.topic.expression=value.after.ordertype == 'B2C' ? 'b2c_orders' : 'b2b_orders'
... 其他更改和错误修复
此版本中的其他一些功能和修复包括:
-
支持 Postgres 的
JSON、JSONB、TIME和TIMESTAMP数组列 (DBZ-1969, DBZ-1990) -
Postgres 连接器的列白名单,当您只对捕获一小部分表列感兴趣时非常有用 (DBZ-1962)
-
正确处理 MySQL 的
FLUSH TABLE语句 (DBZ-2047) -
路由出的 outbox 事件使用唯一的命名空间 (DBZ-1963)
-
修复了 Postgres
BIT VARYING列中潜在的值溢出问题 (DBZ-1949) -
已从 outbox 路由 SMT 中移除对
eventType字段的支持 (DBZ-2014);如有需要,请将此字段显式配置为 header 或消息值属性;这样做是为了允许使用任何自定义名称导出此字段,而以前这并不容易实现。 -
使用枚举列时,Postgres 连接器的启动性能有所提高 (DBZ-2038)
有关所有已解决的问题和升级过程的列表,请参阅 发行说明。
非常感谢所有为本次发布做出贡献的社区成员:Anders Engström, Anton Kondratev, Bingqin Zhou, Braden Groom, David Jerome, Hossein Torabi, Ivan Klass Jan-Hendrik Dolling, John Psoroulas, Jos Huiting, Joy Gao lyidataminr, 和 Siddhant Agnihotry!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。