我非常高兴地宣布 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 的 JSONJSONBTIMETIMESTAMP 数组列 (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)

有关所有已解决的问题和升级过程的列表,请参阅 发行说明

Gunnar Morling

Gunnar 是一位软件工程师,内心是一个开源爱好者,目前在 Confluent 担任技术专家。此前,他曾帮助构建一个基于 Apache Flink 的实时流处理平台,并领导了 Debezium 项目,这是一个用于变更数据捕获的分布式平台。他是 Java Champion,并创立了多个开源项目,如 JfrUnit、kcctl 和 MapStruct。Gunnar 是一位热情的博主 (morling.dev),并曾在 QCon、Java One 和 Devoxx 等各种会议上发表演讲。他居住在德国汉堡。

   


关于 Debezium

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

参与进来

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

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