我很高兴地宣布 Debezium 1.8.0.Beta1的发布!

此版本包含令人兴奋的新功能,例如对 MongoDB 5.0 的支持、MongoDB 连接器的发件箱事件路由器和对 Postgres 逻辑解码消息的支持,以及大量错误修复和其他改进。总的来说,此版本已修复不少于63 个问题。

让我们仔细看看其中的一些。

MongoDB 发件箱事件路由器

发件箱模式越来越流行,用于以可靠的方式在微服务之间交换数据,而不使用对服务数据库和 Apache Kafka 的不安全双重写入

使用发件箱模式,您不是从实际业务表中捕获更改,而是将要发送给外部消费者的消息写入专用发件箱表。这很好地将您的内部数据模型与用于与外部服务通信的消息契约分离,允许您独立开发和发展这些模型。对您的业务表的更新和对发件箱表的插入是在一个数据库事务中完成的,因此要么完成这两件事,要么什么都不做。一旦消息被保存在发件箱表中,Debezium 可以从那里捕获它并使用通常的至少一次语义将其传播给任何消费者。

Debezium 通过特殊的单消息转换 (SMT),即发件箱事件路由器,为实现发件箱模式提供支持。这负责将事件从单个发件箱表路由到不同的主题,基于表示事件所针对的聚合类型(用域驱动设计的说法)的可配置列。此外,还有一个用于从使用Quarkus构建的服务发出发件箱事件的扩展,这是一个用于构建云原生微服务的堆栈。

这些东西现在由一个新的事件路由 SMT补充,它与 MongoDB 的 Debezium 连接器一起工作。由于 MongoDB 连接器的事件格式与关系数据库的 Debezium 连接器的格式不同,因此有必要创建此单独的 SMT。以下是配置 SMT 的示例:

{"name": "outbox-connector","config": {"connector.class" : "io.debezium.connector.mongodb.MongoDbConnector","tasks.max" : "1","mongodb.hosts" : "rs0/mongodb:27017","mongodb.name" : "dbserver1","mongodb.user" : "debezium","mongodb.password" : "dbz","collection.include.list": "inventory.outboxevent","database.history.kafka.bootstrap.servers" : "kafka:9092","transforms" : "outbox","transforms.outbox.type" :"io.debezium.connector.mongodb.transforms.outbox.MongoEventRouter","transforms.outbox.route.topic.replacement" : "${routedByValue}.events","transforms.outbox.collection.expand.json.payload" : "true","transforms.outbox.collection.field.event.timestamp" : "timestamp","transforms.outbox.collection.fields.additional.placement" : "type:header:eventType","key.converter": "org.apache.kafka.connect.storage.StringConverter","value.converter": "org.apache.kafka.connect.storage.StringConverter"}
}

在这里,我们使用MongoEventRouterSMT 来捕获inventory.outboxevent集合中的更改。事件可以这样编写,以 MongoDB CLI 为例:

new_order = { "_id" : ObjectId("000000000000000000000002"), "order_date" : ISODate("2021-11-22T00:00:00Z"), "purchaser_id" : NumberLong(1004), "quantity" : 1, "product_id" : NumberLong(107) }s = db.getMongo().startSession()
s.startTransaction()s.getDatabase("inventory").orders.insert(new_order)
s.getDatabase("inventory").outboxevent.insert({ _id : ObjectId("000000000000000000000001"), aggregateid : new_order._id, aggregatetype : "Order", type : "OrderCreated", timestamp: NumberLong(1556890294484), payload : new_order })s.commitTransaction()

请注意我们如何在事务中插入业务集合(“订单”)和发件箱集合(“发件箱事件”),这是自 MongoDB 4.0 版以来所支持的。在这种特殊情况下,虽然我们在发件箱消息本身中使用实际订单对象,但我们也可以将这些内容分开,并在发件箱事件中选择采购订单的另一种表示形式。

订单聚合的 id用作 Kafka 中的消息键,确保与给定采购订单相关的所有发件箱事件的顺序一致。的聚合类型被用于确定所述主题名称路由事件,Order.events在这个例子中。消息本身的唯一ID作为 Kafka 消息中的标头传播,例如允许消费者识别重复的消息。

您可以在我们的演示存储库中找到使用这个新的 MongoDB 发件箱事件路由 SMT的完整示例。非常感谢Sungho Hwang,他不仅提供了实际的功能实现本身,还创建了这个示例。

围绕 Debezium MongoDB 连接器发件箱支持的潜在下一步可能是将 MongoDB 支持添加到 Quarkus 发件箱扩展中,并可以选择从附加到实体的子文档中捕获发件箱事件,例如Order. 这样,您的应用程序的数据和发件箱消息可以作为单个文档编写(否则应用程序将忽略发件箱子文档本身)并且不需要跨文档事务。这个想法是通过DBZ-4319跟踪的;如果您认为这是一个有用的补充,或者您是否有兴趣实施它,请告诉我们。

对 Postgres 的支持 pg_logical_emit_message()

Postgres 的多功能性和灵活性堪称传奇;有趣但鲜为人知的功能之一是能够将消息写入数据库的事务日志 (WAL),而实际上无需写入表。这是通过pg_logical_emit_message()函数完成的。从 Postgres 14 开始,可以使用pgoutput插件捕获这些逻辑解码消息,并且从该版本开始,Debezium 也支持这种事件类型。

逻辑解码消息非常适合传播与您的交易相关的上下文信息,而无需将此数据存储在表中。例如,这可能是审核元数据,例如触发某些数据更改的业务用户。另一个潜在的用例是上面提到的发件箱模式,它可以在没有专用发件箱表的情况下实现,只需将发件箱事件写入 WAL。例如,在考虑内务管理时,这是有利的:在将消息传播到 Kafka 后,无需从发件箱表中删除消息。

“发送”一个逻辑解码消息就这么简单:

SELECT pg_logical_emit_message(true, 'some-prefix', 'some text');

这会发出一个事务性的 ( true)消息,带有“some-prefix”前缀和“some text”作为消息内容。前缀可用于将消息分组到逻辑上下文中。Debezium 使用前缀作为 Kafka 消息键,即所有具有相同前缀的消息将进入相应 Kafka 主题的相同分区,因此将按照创建时相同的顺序传播给下游消费者。

逻辑解码消息由 Debezium Postgres 连接器使用新的事件类型(“m”)发出,看起来像这样(消息内容是二进制编码的,在本例中使用 Base64):

{"source": {"version": "1.8.0.Beta1","connector": "postgresql","name": "PostgreSQL_server","ts_ms": 1559033904863,"snapshot": false,"db": "postgres","schema": "","table": "","txId": 556,"lsn": 46523128,"xmin": null},"op": "m","ts_ms": 1559033904961,"message": {"prefix": "some-prefix","content": "c29tZSB0ZXh0"}
}

消息内容是任意有效载荷,除了文本表示之外,您还可以在此处插入二进制数据。事件生产者有责任记录格式,在考虑向后兼容性的情况下发展它,并与任何客户端交换模式信息。这样做的一种好方法是利用模式注册表,例如Apicurio。您还可以考虑使用诸如CloudEvents 之类的标准来进行逻辑解码消息,例如,这将允许 SMT(如上述发件箱事件路由器)根据事件结构中定义的属性采取行动。

要了解有关 Debezium 中逻辑解码消息支持的更多信息,请参阅连接器文档。非常感谢 Lairen Hightower 实现此功能!

其他修复和更改

1.8.0.Beta1 版本中的进一步修复和改进包括:

  • 支持在 Debezium UI 中配置 SMT 和主题创建设置;你可以在这篇文章的快速视频中看到前者,我们将在本周晚些时候分享主题创建 UI 的另一个演示

  • Vitess 连接器中的交易元数据事件 ( DBZ-4355 );我们还通过删除对 vtctld ( DBZ-4324 )的依赖来简化其配置,添加了对stop_on_reshard标志 ( DBZ-4295 ) 的支持,并提供了将 VGTID 指定为流式传输起点的功能 ( DBZ-4297 )。所有这些变化都是由 Stripe 工程团队的 Yang Wu 和 Shichao 贡献的,他们同意加强作为这个连接器的维护者。非常感谢,欢迎!

  • 针对 Oracle 的 Debezium 连接器的基于 Infinispan 的事务缓冲区的更灵活配置 ( DBZ-4169 )

  • 改进MONEY了 Postgres中的列 ( DBZ-1931 ) 和INTERVALOracle 中的列 ( DBZ-1539 ) 的类型映射

  • 在使用 Debezium 连接器为 MySQL ( DBZ-4196 )执行增量快照时支持架构更改;感谢 Kate Galieva 的这一非常有用的改进!

请参阅发行说明以了解有关此版本中这些和进一步修复的更多信息。

总结

随着 Beta1 的发布,我们正在接近 1.8 发布周期的最后阶段。您可以期待下周某个时候的 CR1,并且根据收到的问题报告,我们可能会决定在圣诞节前一周或 2022 年的第一周削减最终版本。就要添加的功能而言,我们有一件事想要了解的是对 MongoDB 连接器的增量快照支持。我们将不得不看看这是否会在剩余的时间内完成,或者是否必须等待 Debezium 1.9 发布。在 1.8 发布线日趋成熟的同时,您也可以期待 Debezium 1.7.2 的发布。

展望未来,我们还将继续围绕 Debezium 2.0 进行规划,该版本将于明年某个时候发布。请在邮件列表中加入有关此主题的讨论。

本文转自网络,因为找到来源,所以如有侵权,随时联系揽件删除,微信:

langjianliaodashuju 。

Flink CDC 核心组件 Debezium 1.8.0.Beta1 发布!多个重磅特性解读!相关推荐

  1. XCMS V1.0 Beta1 发布

    XCMS V1.0 Beta1 发布 说明: XCMS是一个内容管理系统,是新生命开发团队利用业余时间开发的第一个成功项目! XCMS目前只有基本的文章发布.栏目管理.评论.用户管理和模板管理等功能. ...

  2. phpMyAdmin 4.4.0 beta1 发布,MySQL 管理工具

    phpMyAdmin 4.4.0 beta1 发布,此版本包括大量的 bug 修复. 值得关注的新特性: Rename configuration directive from $cfg['Navig ...

  3. 苹果官方将首次参与天猫 618 促销活动;淘宝回应用户账号被禁用980年;Julia 1.5.0 beta1 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  4. 腾讯回应考生喊话马化腾;库克承认在使用 ChatGPT;OpenHarmony 4.0 Beta1 发布 | 极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  5. JBoss Seam 3.0.0.Beta1 发布

    JBoss Seam是"Java EE 5.0的一个轻量级的框架".它在Java EE 5.0框架的上层,为所有的在企业Web应用中的组件提供了一个统一的.易于理解的编程模型.它同 ...

  6. 【UC浏览器】魅族M8专版7.0 beta1发布啦

    尊敬的各位友友 在各位魅友的支持与期盼下,UC浏览器今天终于推出了魅族M8 专版7.0 beta1 啦~~                      本专版的UC浏览器,专为魅族M8手机度身定做,为您 ...

  7. Flink CDC 2.0 正式发布,详解核心改进

    简介:Flink CDC 2.0.0 版本于 8 月 10 日正式发布,点击了解详情- 本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flin ...

  8. flink cdc 连接posgresql 数据库相关问题整理

    flink cdc 连接posgresql 数据库 01 .flink posgresql cdc 前置工作 1,更改配置文件postgresql.conf # 更改wal日志方式为logical w ...

  9. Flink CDC 2.0原理详解和生产实践

    点击上方蓝色字体,选择"设为星标" 回复"面试"获取更多惊喜 八股文交给我,你们专心刷题和面试 Hi,我是王知无,一个大数据领域的原创作者. 放心关注我,获取更 ...

最新文章

  1. CV02-FCN笔记
  2. 分享丨李飞飞、吴恩达、Bengio等人的顶级深度学习课程
  3. 漫画:如何给女朋友解释什么是“锟斤拷”?
  4. 完美配置Tomcat的HTTPS
  5. excel按季度分类汇总_巧用excel进行分类汇总的五种方法
  6. 集训模拟赛改题及总结(7月part)
  7. 【Excel VBA】一键取消excel中所有隐藏sheet
  8. 技术圈大佬,带你用技术赚到副业的第一桶金!
  9. layui框架实战案例(8):web图片裁切插件croppers.js组件实现上传图片的自定义截取(含php后端)
  10. 计算机博士、加班到凌晨也要化妆、段子手……IT 女神驾到!
  11. 神威太湖之光之超级计算机,中国研发的“神威·太湖之光”,超级计算机能给我们带来什么?...
  12. 深度清理mac磁盘空间的方法,方方面面都清理干净
  13. 期末GIS人的《计量地理学》突击复习有救了
  14. 维谛技术Vertiv 暑期实习
  15. ThinkAdmin学习总结
  16. python123 第四次作业_第四次作业
  17. Xcode自带的超好用的诊断工具
  18. 带你一文搞懂VMware Workstation的三种网络模式
  19. rem和vw,vh的介绍
  20. 枚举 switch case 标签必须为枚举常量的非限定名称

热门文章

  1. 高PowerSurfacing RE v2.4-4.1 for SolidWorks 2012-2017 Win64 6CD
  2. 谈谈微信公众号的交易价值
  3. 前端叹了口气,并表示谣言止于智者
  4. python--摄氏温度华氏温度转换
  5. 前端——CSS如何使文字居中
  6. 《Google软件测试之道》目录—导读
  7. 最近几年电力行业信息化发展趋势和奥运对电力信息化的推动
  8. [转]MMS流媒体播放器让你实现边上网边听广播
  9. 基于opencv-python的人脸识别算法
  10. BIGEMAP如何通过ArcScene 建立三维地图模型