Debezium日常分享系列之:Debezium 2.6.0.Alpha2发布

一、重大变化

Vitess:

  • 以前版本的连接器使用的任务配置格式可能会破坏 Kafka Connect 集群的稳定性。为了解决该问题,Debezium 2.6 引入了一种与以前的格式(DBZ-7250)不兼容的新配置格式。升级时,您可能会遇到 NullPointerException 和错误,指示连接器无法实例化任务,因为它包含无效的任务配置。
  • 如果您遇到此问题,请删除并使用与以前相同的名称和配置重新创建连接器。连接器将启动并重新使用上次使用相同名称存储的偏移量,但不会重新使用旧的任务配置,从而避免启动失败。

二、改进和变化

1.支持Java 17

  • Debezium 3.0 将于今年秋季晚些时候推出,将再次将 Java 基线要求从 Java 11 转移到 17,以使用 Debezium。为了准备今年晚些时候的 Debezium 3,我们将把 Debezium 2.6 和 2.7 的编译时基线转变为需要 Java 17。
  • 如果您是 Debezium 用户,并且使用 Debezium 连接器,则不需要您执行任何操作。您现在可以继续使用 Java 11,不会有任何问题,因为 Debezium 3 将在今年晚些时候需要 Java 17。
  • 如果您正在开发 Debezium 连接器,Java 17 现在是编译 Debezium 源代码的基准。如果您一直在使用 Java 17,则您不应该采取任何操作。如果您之前使用的是 Java 11,则需要迁移到 Java 17 才能从源代码进行编译。
  • 如果您使用 Debezium Quarkus Outbox Extension(不是 Outbox SMT),由于 Quarkus 3.7+ 正在转向 Java 17 作为其基准,Debezium Quarkus Outbox Extension 现在将需要 Java 17 作为运行时和编译时的基准。
  • 我们预计这种过渡对于大多数用户来说基本上是无缝的,因为此时这对 Debezium 连接器或 Debezium 服务器的运行时间绝对不会产生影响。

2.异步嵌入式引擎

  • 如果是第一次听说嵌入式引擎,Debezium 附带了三种运行 Debezium 连接器的方法。最常见的是在 Kafka Connect 上部署 Debezium,而第二常见的是使用 Debezium Server,这是 Debezium 连接器的只读运行时。然而,还有第三个选项,称为嵌入式引擎,它是 Debezium 在其测试套件内部使用的,它是 Debezium Server 的基础,旨在提供一种将 Debezium 连接器嵌入到您自己的应用程序中的方法。该嵌入式引擎被各种外部贡献者和框架使用,最值得注意的是 Apache Flink 严重依赖嵌入式引擎来实现基于 Debezium 的 CDC 连接器。
  • Debezium 2.6 最大、最重要的新功能之一是我们在此 alpha 版本中首次推出的异步嵌入式引擎。这个新的异步版本是 Debezium Server 和嵌入 Debezium 的未来的基础。这一变化侧重于几个关键目标和举措:
    • 如果连接器支持多个任务,则为给定连接器运行多个源任务
    • 在专用线程中运行耗时的代码(转换或序列化)
    • 通过禁用事件调度顺序来提高性能
    • 提供虚拟线程和委托给外部工作人员等未来技术优势
    • 与 Debezium Operator for Kubernetes 和 Debezium UI 更好地集成
    • 与 Debezium Server 的 Quarkus 无缝集成

这个新的异步模型不包括或不关注以下内容:

  • 在连接器的主捕获循环内实现并行化。
  • 从 Kafka Connect 中删除任何依赖项
  • 添加对每个引擎部署多个源连接器的支持
  • 添加对接收器连接器的支持

即使连接器是单线程且不支持多个任务,使用嵌入式引擎或 Debezium 服务器的连接器部署也可以利用新的异步模型。均匀分派期间的大部分时间都花在转换和序列化阶段,因此在这些阶段使用新的专用工作线程可以提高吞吐量。

对于想要开始使用新的异步嵌入式引擎的开发人员,debezium 嵌入式工件中现在包含一个名为 io.debezium.embedded.async 的新包,该包包含利用此新实现的所有相关组件。可以使用构建器模式以与串行版本类似的方式构建异步模型,如下所示。

final DebeziumEngine engine = new AsyncEngine.AsyncEngineBuilder()
    .using(properties)
    .notifying(this::changeConsumerHandler)
    .build();

3.时间戳转换器改进

  • Debezium 在 Debezium 2.4 中发布了新的 TimezoneConverter,允许用户定位特定时区并将传出负载时间值转换为该目标时区。最初的实现被明确限制为允许在有效负载的前后部分内进行值转换;然而,由于进行了改进,该转换器现在可用于转换元数据中的其他基于时间的字段,例如源信息块中的 ts_ms。
  • 在运行连接器的 JVM 使用与数据库不同的时区的情况下,此更改有助于改进滞后指标计算,并且信封 ts_ms - 源 ts_ms 的计算会导致由时区引起的差异。通过使用 TimezoneConverter 转换元数据字段,您可以轻松计算这两个字段之间的滞后,而不会受到时区干扰。

4.SQL Server 查询改进

  • Debezium SQL Server 利用名为 fn_cdc_get_all_changes… 的通用 SQL Server 存储过程来获取给定表的所有相关捕获的更改。此查询执行多个联合,并且仅从联合子查询之一返回数据,这可能效率低下。
  • Debezium 2.6 for SQL Server 引入了一个新的配置属性 data.query.mode,可用于影响连接器将使用哪种特定方法来收集有关表更改的详细信息。与旧版本相比,默认值保持不变,使用值函数委托给上述存储过程。可以使用名为 direct 的新选项直接在连接器内构建查询,以更有效地收集更改。

5.范围密钥/信任 - MongoDB 的存储支持

  • Debezium 支持安全连接;但是,MongoDB 要求将密钥/信任存储配置作为 JVM 进程参数提供,这对于云等环境来说不太理想。作为协调如何跨连接器指定安全连接配置的第一步,Debezium 2.6 for MongoDB 现在支持在连接器配置中指定范围密钥/信任存储配置。

MongoDB 连接器现在包含以下新配置属性:

  • mongodb.ssl.keystore:指定 SSL 密钥库文件的路径。
  • mongodb.ssl.keystore.password:指定用于打开和访问 mongodb.ssl.keystore 提供的 SSL 密钥库的凭据。
  • mongodb.ssl.keystore.type:指定 SSL 密钥库文件类型,默认为 PKC512。
  • mongodb.ssl.truststore:指定 SSL 信任库文件的路径。
  • mongodb.ssl.truststore.password:指定用于打开和访问 mongodb.ssl.truststore 提供的 SSL 信任库的凭据。
  • mongodb.ssl.truststore.type:指定 SSL 信任库文件类型,默认为 PKC512。

6.源交易id变化

  • 所有 Debezium 更改事件都包含一个称为源信息块的特殊元数据块。这部分事件负载负责提供有关更改事件的元数据,包括更改的唯一标识符、更改发生的时间、更改引用的数据库和表,以及有关更改的事务的事务元数据。
  • 在 Debezium 2.6 中,将不再提供源信息块中的 transaction_id 字段,除非该字段填充了值。这不会给用户带来任何问题,因为仅当连接器配置为 Provide.transaction.metadata 设置为 true (DBZ-7380) 时,才会填充此字段。
  • 如果您的工具期望源信息块的 transaction_id 字段存在(尽管它是可选的),则您将需要调整该行为,因为除非填充,否则该字段将不再存在。

7.Google PubSub 订购密钥支持

  • Debezium Server Google PubSub 接收器适配器在 Debezium 2.6 中收到了一个小更新。如果您正在流式传输具有外键关系的更改,您可能想知道是否可以指定排序键以便维护外键约束。
  • Debezium 2.6 为 Google PubSub 接收器适配器引入了一个新的可配置属性 ordering.key,它允许接收器适配器使用事件连接器配置中外部提供的排序键,而不是使用基于事件键的默认行为。

8.MongoDB UUID 密钥支持增量快照

  • 作为 Debezium for MongoDB 连接器增量快照流程的一个小改进,Debezium 2.6 添加了对 UUID 数据类型的支持,允许该数据类型像其他数据类型一样在增量快照流程中使用。

9.MongoDB 图像后更改

  • MongoDB 连接器的事件负载可以配置为包含更新中更改的完整文档。连接器之前对如何获取完整文档作为变更流的一部分做出了固执己见的选择;然而,这种行为与我们在所有用例中的预期并不相符。
  • Debezium 2.6 引入了一个新的配置选项 capture.mode.full.update.type,允许连接器显式控制如何处理变更流的完整文档查找。该选项的默认值是lookup,这意味着数据库将进行单独的查找以获取完整文档。如果您使用 MongoDB 6+,您还可以选择使用 post_image 来依赖 MongoDB 更改流的后期映像支持。
  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值