我很荣幸地宣布 Debezium 1.1.0.CR1 发布!

此版本带来了全新的 API 模块,包括用于覆盖特定列的 schema 和值转换的功能。Postgres 连接器获得了在连接丢失后重新连接到数据库的能力,MongoDB 连接器现在支持其他连接器已知的指标。

Debezium API 模块

在大多数情况下,Debezium 用户不会以编程方式与 Debezium 交互,而是通过 Kafka Connect 配置和部署不同的连接器。然而,也有一些例外,最值得注意的是 Debezium 的 嵌入式引擎。此外,我们正在通过添加 SPI 来扩展 Debezium,例如用于自定义模式和值的 SPI(见下文)。这引发了一个问题:Debezium 中的哪些包和类供用户公开访问,哪些不供用户访问。

为了区分 Debezium 的公共 Java API 和其内部实现包,引入了一个新的 API 模块。在编译时,用户代码应该只依赖于这个模块,而 debezium-embeddeddebezium-core 工件应该是运行时依赖项。

例如,以下设置应该与 Apache Maven 一起使用

<dependency>
    <groupId>io.debezium</groupId>
    <artifactId>debezium-api</artifactId>
    <version>${version.debezium}</version>
</dependency>
<dependency>
    <groupId>io.debezium</groupId>
    <artifactId>debezium-embedded</artifactId>
    <version>${version.debezium}</version>
    <scope>runtime</scope>
</dependency>

虽然 API 模块的向后兼容演进将得到保证,但实现模块中的破坏性更改可以随时进行。因此,您应该确保您的应用程序代码不依赖于这些。

随着 API 模块的引入,嵌入式引擎的引导 API 也得到了重构。

DebeziumEngine<SourceRecord> engine = DebeziumEngine.create(Connect.class)
    .using(config)
    .notifying(record -> {
        System.out.println(record);
    })
    .build();

目前,事件处理器仍然接收 Kafka Connect 的 SourceRecord 类型,但未来我们还将支持处理其他表示形式(如 JSON 或 Avro)的事件处理器。

模式和值自定义 SPI

在聊天和邮件列表中反复出现的一个问题是如何自定义特定变更事件字段的模式和值。例如,您可能希望将日期时间列的值导出为特定格式的字符串,而不是默认表示(自 epoch 以来的毫秒数)。这个问题的答案是实现一个自定义的消息转换(SMT)用于 Kafka Connect。但是,由于它们可能会增加吞吐量(尤其是在处理更复杂的模式时),我们在 Debezium 本身添加了一个新的扩展点,允许您覆盖捕获表的特定列的模式和值转换。

例如,下面的转换器可以实现,以将 Postgres ISBN 列的值导出为具有特定逻辑字段类型“isbn”的值,而不是默认的“string”模式。

public class IsbnConverter implements CustomConverter<SchemaBuilder, RelationalColumn> {

    private SchemaBuilder isbnSchema;

    // could evaluate config here
    @Override
    public void configure(Properties props) {
        isbnSchema = SchemaBuilder.string().name("isbn");
    }

    @Override
    public void converterFor(RelationalColumn column,
            ConverterRegistration<SchemaBuilder> registration) {

        // register custom schema and value conversion for "isbn" columns
        if ("isbn".equals(column.typeName())) {
            registration.register(isbnSchema, x -> x.toString());
        }
    }
}

为了使用这种自定义转换器,请将其编译,并将 JAR 添加到连接器的插件目录中。配置如下:

converters=isbn
isbn.type=com.example.IsbnConverter
# custom options as needed
isbn.foo=bar

其他功能和更改

MongoDB 连接器已迁移到我们为 SQL Server 和 Oracle 连接器开始开发的通用 CDC 连接器框架。这将极大地简化我们的代码库维护,因为许多跨领域的功能可以在一个中心位置实现。例如,MongoDB 连接器现在支持您已经可以在关系型连接器中使用的度量(DBZ-845),让您能够监控生产环境中的连接器。

Postgres 连接器现在支持在数据库连接丢失时自动重连(DBZ-1723)。同样,这在很大程度上是作为通用功能实现的,Postgres 连接器是第一个利用它的连接器。我们已经看到在特定环境中 Postgres 断开连接的报告有所增加,这就是为什么我们决定将其作为第一个支持重连的连接器。

当将更改事件流式传输到其他关系型数据库时,column.propagate.source.type 连接器选项在将精确的列定义传播为模式头时非常有用。到目前为止,这需要为每个单独的列进行配置;从这个版本开始,此选项可以全局设置为列类型,从而大大减少了处理具有特定类型且应导出其模式信息的许多列时的配置需求(DBZ-1830)。

对于 MongoDB 用户来说,另一个改进是新增了支持导出更新和删除事件中分片键信息的 DBZ-1781

一如既往,也修复了大量错误。总的来说,44 个问题已在 Debezium 1.1.0.CR1 中得到解决。更多详情请参考 发布说明

像 Debezium 这样的开源项目离不开其贡献者社区。以下人员为本次发布做出了贡献:Alan ZhangzfFabio CantariniHossein TorabiJanHendrikDollingJohn GrafRaúl TovarRuslan Gibaiev。感谢你们中的每一个人!

随着 CR1 版本的发布,Debezium 1.1 最终版即将到来。根据此候选版本发现的问题,我们可能会发布 CR2 版本,然后很快发布最终版本。有关未来版本的计划,请参阅 路线图,并让我们知道您的需求。我们的总体计划是采用季度小版本发布的节奏,即您可以在大约三个月后期待 Debezium 1.2,在第三季度期待 1.3,以此类推。

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