我很荣幸地宣布Debezium 1.8系列的第一个版本,开云体育官方注册网址1.8.0.Alpha1

随着秋天的颜色,团队一直在努力为这个版本绘制代码行。使用Deb开云体育官方注册网址ezium 1.8.0。Alpha1有相当多的改进,但最值得注意的是新的本地MongoDB 4.0变更流支持!

MongoDB Change Streams支持

MonogoDB改变流允许应用程序或客户端访问实时更改数据捕获事件,而不需要复杂地跟踪oplog。这个功能是MongoDB引擎在3.6版中首次引入的;然而,功能是有限的。从MongoDB 4.0开始,更改流现在可以捕获跨数据库、副本集甚至分片集群的更改。开云体育电动老虎机

开云体育官方注册网址Debezium增加了对变更流的支持:

  • 启用与MongoDB 5的兼容性(尚未测试,请参阅下面的后续工作)。

  • 在更新事件中提供完整的文档输出(见下文)。

  • 从oplog格式的内部(和可能变化的)细节中抽象出来,使这个新实现成为未来oplog读取的潜在替代品。

为了在Debezium中使用变更流支持,您必须使用MongoDB 4.0或更高版本。开云体育官方注册网址

启用

开云体育官方注册网址Debezium for MongoDB公开了一个名为capture.mode.捕获模式指定连接器应该如何从MongoDB数据库获取变更事件。开云体育电动老虎机有效的选项是:

oplog

指定应该通过跟踪oplog来捕获更改;这是遗留行为。

change_streams

指定应该使用MongoDB变更流捕获变更。更新将不包含完整的消息;只有更改的字段是事件的一部分。

change_streams_update_full

指定应该使用MongoDB变更流捕获变更。更新将包含事件中当前记录的完整快照。这是连接器的新默认值。

change_streams而且change_streams_update_full捕获模式正在孵化中,关于这些模式如何工作的格式和细节可能会在未来的版本中改变。

事件的变化

使用我们的教程实例库,让我们来看看这些捕捉模式的区别。

首先,让我们添加一个新的记录客户收集。使用MongoDB shell,可以通过运行以下命令来完成:

db.customers。insert([{_id: NumberLong("1005"), first_name: 'Bob', last_name: 'Hopper', email: 'thebob@example.com', unique_id: UUID()}]);

这将生成一个更改事件,但正如您检查主题时所看到的,该事件的内容在这个版本中并没有太大不同。由于事件是一个插入,因此在触发的事件中提供了所有字段值。

在更新期间,这是我们可以看到捕获模式差异的地方。现在使用MongoDB shell,用下面的命令修改客户的姓和名:

db.customers。update( { _id:NumberLong("1005") }, { $set: { first_name: "Bobby", last_name: "Copper" } });

这将修改带有id的客户的姓和名1005.下面几节将展示给定捕获模式下的每个事件。

Oplog

属性时的更新事件片段oplog捕获模式。

模式: {},有效载荷: {补丁\"v美元\": 1、\"元组\": {\"first_name\"\"鲍比\"\"last_name\"\"\"}}过滤器\"_id\": {\"numberLong美元\"\"1005\"}}updateDescription: {版本1.8.0.Alpha1连接器mongodb的名字dbserver1ts_ms1635291250000快照db库存序列rsrs0集合客户奥德1h3510217852938498600托德stxnid},人事处uts_ms1635291250803事务}}

触发事件的after字段没有值。相反,事件为补丁和过滤器提供值,这些值描述了关于源文档中所更改内容的有限详细信息。由于事件只提供关于哪些字段已更改的详细信息,而不提供未更改字段的值,因此对于需要了解完整文档的某些使用者来说,这可能不太理想。

改变流

属性时的更新事件片段change_streams捕获模式。

模式: {},有效载荷: {补丁过滤器updateDescription: {removedFieldsupdatedFields\"first_name\"\"鲍比\"\"last_name\"\"\"truncatedArrays},: {版本1.8.0.Alpha1连接器mongodb的名字dbserver1ts_ms1635292448000快照db库存序列rsrs0集合客户奥德1h托德stxnid},人事处uts_ms1635292448736事务}}

发出的事件的值集与遗留的oplog输出略有不同。如上所示,事件在after、patch或filter字段中没有值。事件依赖于描述文档中字段的更改updateDescription结构。虽然这提供了关于由于更新而可能已设置甚至未设置的值的更多细节,但对于一些需要源文档所有字段的值的使用者来说,这可能仍然不理想。

变更流完整文档

属性时的更新事件片段change_streams_update_full捕获模式。

模式: {},有效载荷: {\"_id\": {\"numberLong美元\"\"1005\"},\"first_name\"\"鲍比\"\"last_name\"\"\"\"电子邮件\"\"thebob@example.com\"\"unique_id\": {\"二元美元\"\"KRywzYp5RneNu8DUmhQHAQ = =\"\"美元的类型\"\"04\"}}补丁过滤器updateDescription: {removedFieldsupdatedFields\"first_name\"\"鲍比\"\"last_name\"\"\"truncatedArrays},: {版本1.8.0.Alpha1连接器mongodb的名字dbserver1ts_ms1635292878000快照db库存序列rsrs0集合客户奥德1h托德stxnid},人事处uts_ms1635292878244事务}}

的捕获模式几乎相同change_streams模式,除了一个关键的区别,即字段使用文档的完整快照填充。这种模式非常适合依赖源文档中所有字段的使用者。

请参阅MongoDB文档有关完整文档模式语义的详细信息。

完整文档模式基于MongoDB通过变更流向连接器提供变更事件时对源文档的重新选择。如果对同一文档的多个更改发生在彼此相邻的位置,则每个事件可能具有相同的完整文档表示。

未来的工作

结合MongoDB变更流已经完成的工作,我们意识到还有很多工作要做,包括针对MongoDB 5测试新的变更流实现,以及更新连接器文档以反映这些新的变更。在下一个预览版中,你可以期待更多的内容。根据更新的Debezium 1.8开云体育官方注册网址路线图,我们还计划为MongoDB的Debezium连接器添加对增量快照的支持,以及支持该连接器事件格式的发件箱事件路由器的变体。开云体育官方注册网址

其他修复

在这个版本中有相当多的错误修复和稳定性变化,一些值得注意的是:

  • LogMiner查询中的行散列无法区分语句的行(dbz - 3834

  • 增量快照中组合主键的块选择语句不正确(dbz - 3860

  • 列。mask.hash.hashAlgorithm.with……使用此特性时发生数据损坏(dbz - 4033

  • Infinispan SPI抛出NPE,使用多个配置到同一个Oracle数据库的连接器(开云体育电动老虎机dbz - 4064

前景

年底即将来临,我们打算以同样的活力向前迈进。我们已经开始了公开讨论关于Debezium开云体育官方注册网址 2.0的邮件列表。您的反馈是非常宝贵的,所以让我们知道您希望看到添加、更改或改进的内容!与此同时,您还可以期待下周发布Debezium 1.7系列的一个小错误修复版本,以及在几周后发布Debezium 1.8系列的另一个预开云体育官方注册网址览版本。流快乐!

克里斯克兰福德

克里斯是红帽公司的软件工程师。他以前是Hibernate ORM团队的成员,现在在Debezium工作。开云体育官方注册网址他住在北卡罗来纳州,距离红帽塔只有几个小时的路程。


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

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

参与

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