我很荣幸地宣布 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-embedded 和 debezium-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。
像 Debezium 这样的开源项目离不开其贡献者社区。以下人员为本次发布做出了贡献:Alan Zhangzf、Fabio Cantarini、Hossein Torabi、JanHendrikDolling、John Graf、Raúl Tovar 和 Ruslan Gibaiev。感谢你们中的每一个人!
随着 CR1 版本的发布,Debezium 1.1 最终版即将到来。根据此候选版本发现的问题,我们可能会发布 CR2 版本,然后很快发布最终版本。有关未来版本的计划,请参阅 路线图,并让我们知道您的需求。我们的总体计划是采用季度小版本发布的节奏,即您可以在大约三个月后期待 Debezium 1.2,在第三季度期待 1.3,以此类推。
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。