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

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D