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

2024-02-19 21:36

本文主要是介绍Debezium日常分享系列之:Debezium 2.6.0.Alpha2发布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • 一、重大变化
  • 二、改进和变化
    • 1.支持Java 17
    • 2.异步嵌入式引擎
    • 3.时间戳转换器改进
    • 4.SQL Server 查询改进
    • 5.范围密钥/信任 - MongoDB 的存储支持
    • 6.源交易id变化
    • 7.Google PubSub 订购密钥支持
    • 8.MongoDB UUID 密钥支持增量快照
    • 9.MongoDB 图像后更改

一、重大变化

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 更改流的后期映像支持。

这篇关于Debezium日常分享系列之:Debezium 2.6.0.Alpha2发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726043

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用