我很高兴地宣布Debezium的发布开云体育官方注册网址0.10.0.CR2

在CR1发布之后,我们决定发布另一个候选版本,因为不仅有大量的错误修复,而且社区提供了一些非常有用的功能实现,我们不想拖延。所以我们调整了一下最初的计划,现在的目标是在下周发布Debezium 0.10最终版,避免出现任何不可预见的倒开云体育官方注册网址退。

像往常一样,让我们仔细看看一些新功能和已解决的错误。

自定义消息键

能够配置一个表的哪些列应该进入对应的Kafka消息的键一直是一个长期的特性请求(dbz - 1015).回顾一下,默认情况下,Debezium的数据更改事件的消息键将包含表示表的主键列开云体育官方注册网址。这是一个明智的默认,但有时更大的灵活性是可取的:

  • 有些表没有主键,特别是在遗留数据模型中

  • 选择与主键不同的消息键可以方便对多个更改数据主题进行操作的流处理应用程序

在构建时,第二种情况尤其有趣卡夫卡流连接多个CDC主题的应用程序:通常,只有在连接两端的消息键相同时才能进行主题连接。

例如,假设我们有两张表,客户而且CustomerDetails具有不同的主键和外键的关系CustomerDetails客户.通过选择该外键列作为客户详细信息更改事件的消息键,可以连接两个表流,而不需要重新输入客户详细信息主题。这样做,新message.key.columnsOption可以这样使用:

message.key.columns = dbserver1.inventory.customerdetails: CustomerId

所有关系型Debezium连接器都支持可定制的消息键。开云体育官方注册网址

Cassandra的可插入序列化器

从之前的公告中,您可能记得Debezium的Cassandra连接器与其他连接器有点不同,因为它不是基于开云体育官方注册网址Kafka Connect框架。因此,直到现在它还不支持可配置消息序列化器的概念;Avro是唯一支持的消息格式。

作为将Cassandra连接器与其他连接器更紧密地对齐的持续努力的一部分,它现在允许配置不同的序列化器,所以你也可以使用JSON, ProtoBuf和其他格式(dbz - 1405).Kafka Connect的序列化器框架为此被重用,所以你可以利用所有现有的序列化器,并以与其他连接器完全相同的方式配置它们。

改进Postgres TOAST列的处理

吐司列是Postgres中处理超过页面大小限制(通常为8 KB)的列值的一种机制。虽然TOAST的使用在与数据库本身交互时是透明的,但在通过逻辑解码获得更改事件时却不是这样。开云体育电动老虎机由于TOASTed值并不存储在物理数据行本身中,因此逻辑解码不会公开的值不变TOAST列(除非该列是表的复制标识的一部分)。

Debezium支持的逻辑解码插件过去以不同的方式处理这种情况(开云体育官方注册网址pgoutputdecoderbufs而且wal2json),其中一种方法是检索“带外”列。

不幸的是,当考虑并发写入这样的记录时,没有办法安全地做到这一点。因此,我们重做了TOAST列的处理方式:如果TOAST列的值没有改变,并且该列不是表的复制标识的一部分,那么它的值将不会包含在更新删除事件。相反,在这种情况下,将导出一个可配置的标记值(默认为__开云体育官方注册网址debezium_unavailable_value).

这避免了以前可能出现的竞态条件,但当然也提出了消费者应该如何处理这个标记值的问题。这个问题有多种可能的答案:

  • 可以简单地忽略该值;实例中,将更改事件写入数据库的使用者可以省略该列开云体育电动老虎机更新它发布的声明

  • 当不使用动态更新时,可以在接收器数据库中安装触发器,忽略将列值设置为标记的任何更新,保持以前的值开云体育电动老虎机

  • 当真正需要完整的更改事件时,包括Kafka更改数据主题本身的TOAST列,可以构建一个有状态的Kafka Streams应用程序,它将传入的更改事件与基于之前保存在状态存储中的列值的标记值相结合

仔细想想,最后一种方法可能是未来博客文章中一个有趣的主题:-)

错误修复和其他更改

除了这些功能实现之外,这个版本还包含了一些错误修复:

  • 当使用pgoutputPostgres的逻辑解码插件,支持自定义发布名称(dbz - 1436

  • Postgres连接器将在一段可配置的时间内重试以获取复制插槽,这在重新平衡集群中的现有连接器(dbz - 1426

  • 使用Avro作为消息格式时,可以替换列名中的保留字符(dbz - 1044

  • MySQL的默认值没有时间部分DATETIME现在支持列(dbz - 1501

  • MySQL创建数据库开云体育电动老虎机而且创建表支持使用默认字符集的语句(dbz - 1470

MongoDB的测试已经扩展到4.2版本(dbz - 1389),并且Postgres驱动程序已更新到最新和最好的版本42.2.7 (dbz - 1462).我们还很高兴地宣布,Debezium容器图像也可以在开云体育官方注册网址quay.io货柜注册处(dbz - 1178).

总的来说,不少于30个问题在0.10 CR2版本中得到了修复。详情请参阅发布说明有关已解决问题和升级程序的完整列表。

如果没有来自Debezium社区的优秀人员的贡献,这个版本就不可能实现:开云体育官方注册网址Bingqin周Ching蔡Guillaume Rosauro哈维尔HolgueraJaromir Hamala乔什·阿伦伯格而且泰勒Rolison

非常感谢大家!

贡纳Morling

Gunnar是Decodable的软件工程师,也是一名不折不扣的开源爱好者。多年来,他一直是Debezium的项目负责人。开云体育官方注册网址Gunnar创建了kcctl、JfrUnit和MapStruct等开源项目,并且是Bean验证2.0 (JSR 380)的规范负责人。他在德国汉堡工作。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

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

Baidu
map