我们非常高兴地宣布 Debezium 1.5.0.Beta2 发布!

此版本的主要功能是新的 Debezium 信号表支持,Vitess SET 类型支持,以及作为我们冲刺 1.5 版本终点线的持续对小改进、错误修复和完善的关注。

总的来说,社区自 Beta1 版本以来修复了 54 个问题,其中一些我们将在下面更深入地探讨。

信号表

信号表功能是 Debezium 的一项重大里程碑。它提供了一种基于源数据库表的命令模式,用于向 Debezium 发送命令(也称为信号),以便采取特定操作。该框架是可扩展的,允许连接器实现 Debezium 核心提供的通用命令之外的自定义命令。这适用于多种情况,包括但不限于 PostgreSQL 主键列更改、列定义枚举值集更改以及 Oracle 连接器的模式更改。这是一个孵化中的功能,因此行为在不同版本之间可能会发生变化。

要使用信号表功能,必须在连接器的配置中指定连接器选项 signal.data.collection。此选项指定了将从中源化信号请求的表的完全限定名称。如果未指定或为空,则信号表功能将禁用。

信号表本身必须提前创建,并且必须遵守以下约定:

列名 数据类型

ID

STRING
信号的唯一标识符,例如 UUID。

TYPE

STRING
要执行的唯一命令。

DATA

STRING
命令的载荷。

最后,必须在连接器的包含/排除列表规范中明确找到信号表。换句话说,如果您指定了要监视的表列表,则需要调整此列表以包含信号表的名称。

这个新功能有相当多的用例,我们打算在未来的版本中进行探索。让我们讨论一下这个版本中目前支持哪些信号。

日志信号

当信号表中的 TYPE 列为 log 时,会检测到日志信号。此信号要求 Debezium 按原样将 DATA 列(载荷)的内容写入连接器日志。这可用于各种目的,从调试到跟踪数据库脚本操作的进度等等。

例如:

INSERT INTO DEBEZIUM_SIGNALS (ID, TYPE, DATA) VALUES ('1', 'log', 'Hello World');

一旦该插入被提交并写入数据库的事务日志,Debezium 将识别该信号,然后使用 INFO 日志级别将 Hello World 写入连接器日志。

模式更改信号

当信号表中的 TYPE 列为 schema-changes 时,会检测到模式更改信号。此信号告诉 Debezium 将 DATA 列(载荷)中提供的更改所基于的 SchemaChangeEvent 发送到模式更改主题。DATA 列的格式必须是 JSON,下面是一个格式示例。此外,此信号还会让 Debezium 更新其内存中表的模式结构表示。

例如,我们有一个 PostgreSQL 表 s1.a,我们想添加一个新列 aa

{
  "database": "postgres",
  "changes": [{
    "type": "ALTER",
    "id": "s1.a",
    "table": {
      "defaultCharsetName": null,
      "primaryKeyColumnNames": [ "pk" ],
      "columns": [{
        "name": "pk",
        "jdbcType": 4,
        "nativeType": 23,
        "typeName": "serial",
        "typeExpression": "serial",
        "charsetName": null,
        "length": 10,
        "scale": 0,
        "position": 1,
        "optional": false,
        "autoIncremented": true,
        "generated": false
      }, {
        "name": "aa",
        "jdbcType": 4,
        "nativeType": 23,
        "typeName": "int4",
        "typeExpression": "int4",
        "charsetName": null,
        "length": 10,
        "scale": 0,
        "position": 2,
        "optional": true,
        "autoIncremented": false,
        "generated": false
      }]
    }
  }]
}

使用此 JSON 载荷,信号将被插入为:

INSERT INTO DEBEZIUM_SIGNALS (ID, TYPE, DATA) VALUES ('1', 'schema-changes', <json-payload-string>);

Vitess SET 支持

Vitess 团队改进了 Vitess 9.0 中的 VStream API 的 SET 数据类型支持。这一改进使得 Debezium Vitess 连接器现在支持 SET 数据类型。此数据类型将作为 EnumSet 发出,其中现在包含列的 SET 定义的所有允许值。

其他功能和修复

除了信号表和 Vitess SET 支持之外,还有一些其他改进和修复在此版本中得到体现。

  • Debezium 的 Oracle 连接器现在默认使用基于 LogMiner 的捕获实现。为了使用基于 XStream 的实现,必须将 database.connection.adapter 选项显式设置为 xstreamDBZ-3241)。

  • 在 Debezium 1.5 的早期版本中,Oracle 连接器开始将 NUMBER(1) 数据类型发出为 BOOLEAN。与其让连接器隐式地进行这种转换,不如将此行为移到一个 OOTB 转换器 NumberOneToBooleanConverter 中,可以根据需要使用(DBZ-3208)。

  • Oracle 连接器会忽略系统生成的索引组织表(以 SYS_IOT_OVER 开头的表)(DBZ-3036)。

  • Debezium Server 的 AWS Kinesis 接收器可以通过指定 debezium.sink.kinesis.endpoint 来配置端点(DBZ-3246)。

一如既往,您可以在 发布说明 中找到所有已解决问题的完整列表以及升级过程。

非常感谢所有为此次发布做出贡献的社区成员:Bingqin ZhouDavid SeapyVictar MalinouskiXiao FuKewei ShangMartín PérezHoa LeVladimir OsinMartín PérezMeng Qiu

下一步是什么?

在缓慢完成 Debezium 1.5 发布线的收尾工作之际,我们也借此机会将 Debezium Oracle 集成到了主 debezium 源代码仓库中。至此,原 debezium-incubator 仓库的所有连接器要么已移至其自己的专用仓库,要么已集成到主仓库中。孵化器仓库已设置为“存档”模式,以便在需要时查看其历史记录。

在 1.5 正式版发布前的剩余时间里,我们计划专注于错误修复、性能改进、文档调整和其他稳定化工作;如果没有任何意外情况,LogMiner 基于捕获的实现也将从孵化状态提升为正式版的稳定状态。如果一切按计划进行,下周中期将发布候选版本(CR),然后在本月底左右发布正式版本。

Chris Cranford

Chris 是 IBM 的一名软件工程师,之前在 Red Hat 工作,他致力于 Debezium 项目,并每天都在深入研究 Oracle 和 Change Data Capture 的各个方面。他此前曾从事 Hibernate(领先的开源 JPA 持久化框架)方面的工作,并且继续为 Quarkus 做贡献。Chris 居住在美国北卡罗来纳州。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×