我很荣幸地宣布 Debezium 2.3 系列的第一个版本,即 2.3.0.Alpha1!
此版本带来了许多令人兴奋的新功能和错误修复,包括 Debezium 状态通知、将 Debezium 状态存储到 JDBC 数据存储、可配置的信号通道、通过 Debezium UI 编辑连接器配置的功能、Vitess 分片处理的并行化,以及更多内容。
此版本包含对 59 个问题的更改,所以让我们花点时间深入了解其中几项新功能以及任何可能值得注意的错误修复或重大更改!
重大变更
PostgreSQL 和 MySQL 的 Debezium 可以配置为使用安全的 SSL 连接。对于 PostgreSQL,可以通过配置 database.sslmode 来实现;对于 MySQL,可以通过配置 database.ssl.mode 来实现。
在 Debezium 2.3 中,此配置选项不再默认为 disable (PostgreSQL) 或 disabled (MySQL),而是默认为 prefer (PostgreSQL) 和 preferred (MySQL)。这意味着,当尝试使用加密的安全连接时,如果连接不可用,连接器将默认回退到使用不安全连接,除非另有配置。
状态通知
Debezium 2.3 引入了一个全新的功能,名为通知。它允许 Debezium 发出事件,任何外部系统都可以消费这些事件,以了解 Debezium 生命周期中各个阶段的状态。
通知事件由一系列键/值对表示,其结构包含多个开箱即用的字段。以下是一个简单的通知事件示例。
{
"id": "c485ccc3-16ff-47cc-b4e8-b56a57c3bad2",
"aggregate_type": "Snapshot",
"type": "Started",
"additional_data": {
...
}
} 每个通知事件包含一个 id 字段,一个 UUID 用于标识通知;一个 aggregate_type 字段,该字段与通知相关,基于领域驱动设计的概念;一个 type 字段,用于提供有关 aggregate type 本身的更多详细信息;以及一个可选的 additional_data 字段,它是一个字符串键/值对的映射,包含有关事件的额外信息。
目前,Debezium 支持两种通知事件类型:
-
初始快照的状态
-
增量快照的监控
初始快照通知
初始快照是指连接器首次启动时对现有数据的持续捕获。初始快照事件将具有 "Initial Snapshot" 值的 aggregate type,而事件的 type 将由三个逻辑值之一组成:
SKIPPED-
表示初始快照已被跳过。
ABORTED-
表示初始快照已被中止。
COMPLETED-
表示初始快照已成功完成。
以下是关于初始快照完成的通知示例
{
"id": "5563ae14-49f8-4579-9641-c1bbc2d76f99",
"aggregate_type": "Initial Snapshot",
"type": "COMPLETED"
} 增量快照通知
增量快照是指在连接器积极流式传输更改时,从配置的一组表中捕获现有数据。增量快照事件将具有 "Incremental Snapshot" 值的 aggregate type,而 type 将由几个逻辑值之一组成:
STARTED-
指示增量快照已开始。
PAUSED-
指示增量快照已被暂时暂停。
RESUMED-
指示先前已暂停的增量快照已恢复。
STOPPED-
指示增量快照已停止。
IN_PROGRESS-
指示增量快照正在进行中。
TABLE_SCAN_COMPLETED-
指示增量快照已为一个给定表完成。
COMPLETED-
指示增量快照已为所有表完成。
配置通知
Debezium 通知通过连接器的配置进行设置。以下示例展示了如何配置开箱即用的 Kafka Topic 或 Log 通道。
{
"notification.enable.channels": "sink",
"notification.sink.topic.name": "debezium_notifications",
...
} {
"notification.enable.channels": "log"
} JDBC 存储模块
Debezium 2.3 引入了一个新的存储模块实现,支持通过 JDBC 将模式历史记录和偏移量数据持久化到数据存储中。对于不易访问持久文件系统的环境,这提供了通过远程持久化存储平台进行存储的又一个选择。
要利用这个新模块,必须将以下依赖添加到您的项目或应用程序中:
<dependency>
<groupId>io.debezium</groupId>
<artifactId>debezium-storage-jdbc</artifactId>
<version>2.3.0.Alpha1</version>
</dependency> 以下示例展示了如何通过 JDBC 存储模块配置偏移量或模式历史记录存储:
{
"offset.storage.jdbc.url": "<jdbc-connection-url>",
"offset.storage.jdbc.user": "dbuser",
"offset.storage.jdbc.password": "secret",
"offset.storage.jdbc.offset_table_name": "debezium_offset_storage"
} {
"schema.history.internal.jdbc.url": "<jdbc-connection-url>",
"schema.history.internal.jdbc.user": "dbuser",
"schema.history.internal.jdbc.password": "secret",
"schema.history.internal.jdbc.schema.history.table.name": "debezium_database_history"
} 其他修复
此版本中修复了许多错误并进行了稳定性改进,其中一些值得注意的包括:
-
Toasted varying character array and date array 没有被正确处理 DBZ-6122
-
引入 LogMiner 查询过滤模式 DBZ-6254
-
部署多个连接器时,LOG_MINING_FLUSH 表上存在锁争用 DBZ-6256
-
确保连接器可以从超过一小时前的陈旧时间戳开始 DBZ-6307
-
Oracle 更改事件源信息块中的 rs_id 字段为 null DBZ-6329
-
将 JWT 身份验证添加到 HTTP 客户端 DBZ-6348
-
使用 pg_replication_slot_advance,它不受 PostgreSQL10 支持。DBZ-6353
-
log.mining.transaction.retention.hours 应引用最后一个偏移量,而不是 sysdate DBZ-6355
-
支持流式处理分片列表时的多个任务 DBZ-6365
-
Kinesis Sink - AWS 凭证提供商 DBZ-6372
-
Toasted hstore 没有被正确处理 DBZ-6379
-
Oracle DDL shrink space for table partition 无法解析 DBZ-6386
-
SQL Server 的 __source_ts_ms r (read) 操作日期设置为未来 DBZ-6388
-
PostgreSQL 连接器任务因复制槽处于活动状态而无法恢复流式传输 DBZ-6396
-
MongoDB 连接器在无效的 resume token 时崩溃 DBZ-6402
-
只读 MySQL 连接器启动时出现 NPE DBZ-6440
总共有 59 个问题 在本次发布中得到修复。非常感谢社区中为此次发布做出贡献的所有贡献者:Anisha Mohanty、Bertrand Paquet、Bob Roldan、Breno Moreira、Chris Cranford、Frederic Laurent、Gong Chang Hua、Harvey Yue、Hidetomi Umaki、Jakub Cechacek、Jiri Pechanec、Kanthi Subramanian、Katerina Galieva、Mario Fiore Vitale、Martin Medek、Miguel Angel Sotomayor、Nir Levy、Oren Elias、RJ Nowling、Robert Roldan、Ronak Jain、Sergey Eizner、Stephen Clarkson、Thomas Thornton,以及 蔡灿材!
下一步是什么?
随着 Debezium 2.3 的启动,我预计在接下来的六周内将有一个相当快的 alpha、beta 和最终发布周期。在此期间,我们还有很多工作要做,希望能够纳入此版本,敬请期待。随着临近六月底,我们将开始规划 Debezium 2.4!
此外,2023 年 Red Hat Summit 会议将于下周在波士顿举行。届时将有一个专题讨论会,Hugo 和 Chris 将在会上讨论新的 Debezium JDBC sink 连接器。如果您能参加,我们非常希望能有机会在会议前后与您交流。
下次再见……
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。