随着团队投入到春天般的行动中,春天已经来临,我们带着夏天的精神,很高兴地宣布 Debezium 2.6.0.Final 现已发布。此版本包含数十项新功能、错误修复和改进,这些都源于团队和社区贡献者的英勇努力。总共有 249 个问题已解决,有超过 56 位贡献者参与。让我们花点时间回顾所有更改。
重大变更
虽然我们尽量避免次要版本之间出现任何潜在的破坏性更改,但这些更改有时是不可避免的。升级到 Debezium 2.6 包含总共 7 项独特的破坏性更改。
- MySQL
-
-
MySQL 驱动已更新至 8.3.0 版本,该驱动与 MySQL 5.x 不兼容。如果您仍需要使用旧版本的 MySQL,请在安装后将驱动降级到与您的数据库兼容的版本(DBZ-7652)。
-
- MongoDB
-
-
MongoDB 连接器不再支持 `replica_set` 模式(DBZ-7260)。此功能已弃用数个版本,并且在 Debezium 2.x 系列中一直在努力实现此目标。如果您正在使用 `replica_set` 模式,在使用 Debezium 2.6+ 时需要进行调整。
-
- SQL Server
-
-
SQL Server 连接器在首次部署时未能捕获所有 Schema,而仅捕获配置的 include 列表中定义的表的 Schema。这是一个错误,可能会阻止用户在期望新表的 Schema 已存在于 Schema 历史 Topic 中时轻松地向连接器添加新表。该连接器现在正确地遵守了
store.only.captured.tables.ddl配置选项(DBZ-7593)。
对于现有的连接器部署,如果您没有为 Schema 历史 Topic 指定store.only.captured.tables.ddl属性,连接器将开始捕获数据库中所有相关表的 Schema 更改。如果您想阻止这种情况并保留之前的行为,则需要通过添加schema.history.internal.store.only.captured.tables.ddl并将其值设置为true来调整您的连接器配置。
-
- Oracle
-
-
在旧版本的 Debezium 中,用户需要手动安装 `ojdbc8.jar` JDBC 驱动。从 2.6 版本开始,连接器现在将 Oracle JDBC 驱动程序与连接器一起打包,因此不再需要手动安装(DBZ-7364)。
-
| 我们还将驱动程序更新至 `21.11.0.0` 版本,请在升级到 Debezium 2.6 后验证您没有多个版本(DBZ-7365)。 |
- Vitess
-
-
前一版本连接器使用的任务配置格式可能会导致 Kafka Connect 集群不稳定。为了解决此问题,Debezium 2.6 引入了一种新的配置格式,与之前的格式不兼容(DBZ-7250)。升级时,您可能会遇到 `NullPointerException` 错误,指示连接器因包含无效的任务配置而无法实例化任务。
如果您遇到此问题,请删除并重新创建连接器,使用与之前相同的名称和配置。连接器将启动并重新使用上次存储的偏移量,但不会重用旧的任务配置,从而避免启动失败。 -
Vitess 连接器之前使用 `BEGIN` 消息的时间戳作为源时间戳。现在已更改为使用 `COMMIT` 时间戳,以反映其他连接器的行为(DBZ-7628)。
-
- 容器镜像
-
-
`connect-base` 容器镜像(`debezium/connect` 的基础)中的 `MAVEN_DEP_DESTINATION` 环境变量处理方式已更改。它不再用于下载所有依赖项(包括连接器),而仅用于通用的 Maven Central 存储库依赖项(DBZ-7551)。如果您使用了依赖于此环境变量的自定义镜像,则可能需要修改镜像构建步骤。
-
新功能和改进
Debezium 2.6 还引入了许多改进和新功能,让我们逐一来看。
Db2 for iSeries 连接器
Debezium 2.6 为 IBM 用户推出了一款全新的连接器,用于通过 IBM iJournal 系统从 Db2 iSeries/AS400 流式传输更改。这是一项多年的社区开发成果,我们很高兴社区允许将其分发在 Debezium 目录下。
您可以通过 Maven Central 获取新连接器,使用以下坐标或 直接下载。
<dependency>
<groupId>io.debezium</groupId>
<artifactId>debezium-connector-ibmi</artifactId>
<version>2.6.0.Beta1</version>
</dependency> | 此新连接器的文档仍在完善中。如果您有任何疑问,请随时通过 Zulip 或邮件列表联系团队。 |
Java 17 成为编译时要求
Debezium 3.0 将于今年秋季晚些时候发布,届时 Java 基线要求将再次从 Java 11 移至 17 以使用 Debezium。为了准备今年的 Debezium 3,我们正在为 Debezium 2.6 和 2.7 转移到编译时基线,要求使用 Java 17(DBZ-7387)。
如果您是 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 Server 的运行时产生任何影响。
异步嵌入式引擎
如果您是第一次听说嵌入式引擎,Debezium 提供了三种运行 Debezium 连接器的方式。最常见的是将 Debezium 部署在 Kafka Connect 上;其次是使用 Debezium Server,一个现成的 Debezium 连接器运行时。但是,还有第三种选择称为嵌入式引擎,它是在 Debezium 内部用于其测试套件的,它是 Debezium Server 的基础,并且旨在提供一种将 Debezium 连接器嵌入到您自己的应用程序中的方式。嵌入式引擎被各种外部贡献者和框架使用,最值得注意的是 Apache Flink 严重依赖嵌入式引擎来构建其基于 Debezium 的 CDC 连接器。
Debezium 2.6 中最大、最重要的新功能之一是我们在本次 Alpha 版本中推出的异步嵌入式引擎。这个新的异步版本是 Debezium Server 和 Debezium 嵌入式未来发展的基础。此更改侧重于几个关键目标和计划:
-
对于支持多个任务的连接器,运行多个源任务。
-
在专用线程中运行耗时代码(转换或序列化)。
-
通过禁用事件分发顺序来提高性能。
-
提供虚拟线程和委托给外部工作者的未来技术优势。
-
与 Kubernetes 的 Debezium Operator 和 Debezium UI 更好地集成。
-
与 Quarkus 无缝集成以支持 Debezium Server。
此新的异步模型不包含或侧重于以下方面:
-
在连接器的主要捕获循环中实现并行化。
-
移除对 Kafka Connect 的任何依赖。
-
为每个引擎部署添加对多个源连接器的支持。
-
添加对 Sink 连接器的支持。
| 即使连接器是单线程的且不支持多个任务,使用嵌入式引擎或 Debezium Server 的连接器部署也可以利用新的异步模型。事件分发过程中,大部分时间都花在转换和序列化阶段,因此利用新的专用工作线程处理这些阶段可以提高吞吐量。 |
对于想要开始使用新的异步嵌入式引擎的开发人员,`debezium-embedded` artifact 中现在包含了一个新包,名为 `io.debezium.embedded.async`,该包包含使用此新实现的所有相关组件。异步模型可以使用构建器模式以与串行版本类似的方式构建,如下所示。
final DebeziumEngine engine = new AsyncEngine.AsyncEngineBuilder()
.using(properties)
.notifying(this::changeConsumerHandler)
.build(); 我们鼓励大家了解新的异步嵌入式引擎模型,并告知我们您的想法,如果您发现任何错误或问题。我们将在未来的版本中更新文档,重点介绍所有优点和更改,包括示例。在此之前,您可以在设计文档 DDD-7 中找到所有详细信息。
新的统一快照模式
快照过程是每个连接器生命周期中不可或缺的一部分,负责收集所有历史数据并(如果需要)将其发送到目标系统。对于使用多种连接器类型的 Debezium 用户来说,我们理解跨连接器存在的不同快照模式有时会令人困惑。因此,此更改旨在解决这个问题。
对于许多可能已经尝试过或安装过 Debezium 2.6 预发布版本的用户来说,您已经在使用统一快照 SPI,因为它最初被设计为即插即用替换,无需进行任何更改。此版本为 MongoDB 和 DB2 完成了这项工作。
在这些更改中,最值得注意的是以下几点:
-
所有快照模式都可用于所有连接器,但 `never` 模式仍仅限于 MySQL。这意味着之前可能不支持快照模式(如 `when_needed`)的连接器,现在可以使用此模式在连接器确定需要时重新进行快照。
-
`schema_only_recovery` 模式已被弃用,并被 `recovery` 取代。
-
`schema_only` 模式也已被弃用,并被 `no_data` 取代。
| 所有弃用的模式将一直可用,直到今年晚些时候的 Debezium 3。这为用户提供了大约六个月的时间来提前调整脚本、配置和流程。 |
新增匹配集合 API
团队的持续任务之一是将 Debezium UI 的后端迁移到主 Debezium 存储库。这样做的一个独特好处是,我们可以识别连接器运行时和 UI 之间的代码重叠之处,并开发接口契约来暴露这些共享数据。
感谢社区对 DBZ-7167 的贡献,`RelationalBaseSourceConnector` 契约已得到调整,并引入了一个新方法来返回与连接器特定配置匹配的表名列表。任何实现此抽象基类的连接器都需要实现这个新方法。
源事务 ID 更改
所有 Debezium 更改事件都包含一个称为 `source` 信息块的特殊元数据块。事件负载的这部分负责提供更改事件的元数据,包括更改的唯一标识符、更改发生的时间、更改涉及的数据库和表,以及有关更改参与的事务的事务元数据。
在 Debezium 2.6 中,`source` 信息块中的 `transaction_id` 字段将不再提供,除非该字段已填充有值。这不会给用户带来问题,因为只有当连接器配置为 `provide.transaction.metadata` 设置为 `true` 时,才会填充此字段(DBZ-7380)。
如果您有工具期望 `source` 信息块的 `transaction_id` 字段存在(尽管它是可选的),您需要调整该行为,因为除非填充,否则该字段将不再存在。
改进事件时间戳精度
Debezium 2.6 引入了一个社区请求的新功能,用于提高更改事件中时间戳的精度。用户现在会注意到增加了 4 个新字段,两个在 envelope 级别,两个在 `source` 信息块中,如下所示。
{
"source": {
...,
"ts_us": "1559033904863123",
"ts_ns": "1559033904863123000"
},
"ts_us": "1580390884335451",
"ts_ns": "1580390884335451325",
} envelope 值将始终同时提供微秒 (ts_us) 和纳秒 (ts_ns) 值,而 `source` 信息块可能同时具有微秒和纳秒精度值,如果源数据库不提供该级别的精度,则会截断为较低精度。
MongoDB 的范围限定密钥/信任库支持
Debezium 支持安全连接;然而,MongoDB 要求密钥/信任库配置作为 JVM 进程参数提供,这对于云等环境来说不太理想。作为统一跨连接器安全连接配置指定方式的第一步,Debezium 2.6 for MongoDB 现在支持在连接器配置中指定范围限定的密钥/信任库配置(DBZ-7379)。
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`。
MongoDB UUID 密钥支持增量快照
作为对 Debezium for MongoDB 连接器增量快照过程的一个小改进,Debezium 2.6 增加了对 UUID 数据类型的支持,允许此数据类型在增量快照过程中像其他数据类型一样使用(DBZ-7451)。
MongoDB post-image 更改
MongoDB 连接器的事件负载可以配置为包含更新中已更改的完整文档。连接器之前对如何作为更改流的一部分获取完整文档做出了有倾向性的选择;然而,在所有用例中,这种行为与我们的预期不符。
Debezium 2.6 引入了一个新的配置选项 `capture.mode.full.update.type`,允许连接器显式控制更改流的完整文档查找应如何处理(DBZ-7299)。此选项的默认值为 `lookup`,意味着数据库将进行单独查找以获取完整文档。如果您使用 MongoDB 6+,您还可以选择使用 `post_image` 来依赖 MongoDB 更改流的 post-image 支持。
PostgreSQL 的增量快照行值构造函数
PostgreSQL 驱动程序支持一种称为行值构造函数的 SQL 语法,使用 `ROW()` 函数。这允许查询在处理具有合适索引的多列主键时以更有效的方式表达谓词条件。增量快照过程是使用 `ROW()` 函数的理想选择,该过程涉及发出一系列 SELECT SQL 语句来分块获取数据。每个语句(即块查询)应尽可能高效,以最小化这些查询的成本开销,从而最大化 WAL 更改到主题的吞吐量。
不需要进行任何特定的更改,但已调整 PostgreSQL 增量快照发出的查询以利用此新语法,因此使用增量快照的用户应会看到性能提升。
旧查询的一个示例可能是这样为一个简单表
SELECT *
FROM users
WHERE (a = 10 AND (b > 2 OR b IS NULL)) OR (a > 10) OR (a IS NULL)
ORDER BY a, b LIMIT 1024 新实现使用 `ROW()` 函数构造此查询如下:
SELECT *
FROM users
WHERE row(a,b) > row(10,2)
ORDER BY a, b LIMIT 1024 我们很乐意收到您对此次更改的反馈以及观察到的性能提升。
SQL Server 查询改进
Debezium SQL Server 使用一个通用的 SQL Server 存储过程 `fn_cdc_get_all_changes…` 来获取给定表的所有相关捕获更改。此查询执行多个联合,并且仅返回一个联合子查询的数据,这可能效率低下。
Debezium 2.6 for SQL Server 引入了一个新的配置属性 `data.query.mode`,可用于影响连接器用于收集表更改详细信息的特定方法(DBZ-7273)。默认值与旧版本保持不变,使用 `function` 值委托给上述存储过程。一个名为 `direct` 的新选项可以替代使用,以便在连接器内部直接构建查询以更有效地收集更改。
Oracle Infinispan 缓存改进
Debezium Oracle 连接器维护一个正在进行的事务缓冲区,并且该缓冲区可以使用 Infinispan 在堆外分配。有时,用户配置指定如果一个正在进行的事务持续时间超过指定的毫秒数,该事务可能会被缓冲区放弃或丢弃。这意味着该事务将被忘记,并且不会由连接器发出。
为了改进与 Grafana 和 Prometheus 等框架的指标集成,添加了一个新的 JMX 指标 `AbandonedTransactionCount`,用于跟踪连接器运行时被放弃的事务数量。
Oracle Redo SQL 每事件(使用 LogMiner)
我们改进了 Oracle 连接器的事件结构,用于插入、更新和删除,以期可选地包含 LogMiner 在 `source` 信息块中重建的 SQL。此功能是可选的,您必须启用它,因为它很容易使现有事件负载的大小增加一倍以上。
要启用将 REDO SQL 作为更改事件的一部分,请添加以下连接器配置:
"log.mining.include.redo.sql": "true" 启用此选项后,`source` 信息块将包含一个新字段 `redo_sql`,如下所示:
"source": {
...
"redo_sql": "INSERT INTO \"DEBEZIUM\".\"TEST\" (\"ID\",\"DATA\") values ('1', 'Test');"
} | 此功能不能与 `lob.enabled` 设置为 `true` 一起使用,因为 LogMiner 会重建与 CLOB、BLOB 和 XML 数据类型相关的 SQL。如果添加了上述配置且 `lob.enabled` 设置为 `true`,连接器将启动并报错,提示配置错误。 |
Oracle LogMiner 事务缓冲区改进
在使用 LogMiner 进行事务注册时,添加了一种新的延迟策略。此策略有效地将事务记录的创建延迟到我们观察到该事务的第一个捕获更改为止。
| 对于使用 Infinispan 缓存或已启用 `lob.enabled` 的用户,由于这两种连接器模式中特定操作的处理方式,无法使用此延迟策略。 |
延迟事务注册有许多好处,包括:
-
减少事务缓存的开销,特别是在高并发事务场景下。
-
避免没有被连接器捕获的长时间运行事务。
-
在特定场景下,应有助于更有效地推进偏移量中的低水位标记 SCN。
我们正在研究如何在未来的构建中为基于 Infinispan 的用户探索此更改;然而,由于 `lob.enabled` 与 LogMiner 的工作方式,对于该用例而言,此功能将不可行。
Oracle LogMiner 混合挖掘策略
Debezium 2.6 还引入了一种新的 Oracle LogMiner 挖掘策略,称为混合,可以通过将配置属性 `log.mining.strategy` 设置为 `hybrid` 值来启用。这种新策略旨在支持默认挖掘策略的所有模式演变功能,同时利用在线目录策略的所有性能优化。
`online_catalog` 策略的主要问题是,如果一个挖掘步骤在同一个挖掘步骤中观察到模式更改和数据更改,LogMiner 就无法正确重建 SQL,这将导致表名为 `OBJ# xxxxxx` 或列表示为 `COL1`、`COL2` 等。为避免这种情况,同时使用在线目录策略,建议用户以锁定步调执行模式更改,以避免同时观察到模式更改和数据更改的挖掘步骤;然而,这并非总是可行的。
新的混合策略通过在数据库级别跟踪表的对象 ID,然后使用此标识符从 Debezium 的关系表模型中查找与该表关联的模式。简而言之,这允许 Debezium 做 Oracle LogMiner 在这些特定边界情况下无法做到的事情。表名将取自关系模型中的表名,列将按列位置映射。
不幸的是,Oracle 不提供重建 CLOB、BLOB 和 XML 数据类型失败的 SQL 操作的方法。这意味着新的混合策略无法与 `lob.enabled` 设置为 `true` 的配置一起使用。如果使用混合策略启动连接器,并且 `lob.enabled` 设置为 `true`,则连接器将无法启动并报告配置失败。
XML 支持 OpenLogReplicator
Debezium for Oracle 连接器支持与 OpenLogReplicator 的连接,允许 Oracle 用户直接从事务日志流式传输更改。OpenLogReplicator 的最新版本 **1.5.0** 已添加对 XML 列类型的支持。
要开始使用 OpenLogReplicator 流式传输 XML,请将 OpenLogReplicator 升级到 1.5.0 并重新启动 replicator 进程。请注意,如果您想流式传输基于二进制的 XML 列数据,您需要在 OpenLogReplicator 配置中启用此功能。
Informix 将 LSN 追加到事务标识符
Informix 数据库仅在存在并发事务时才增加事务标识符,否则对于顺序事务,该值保持不变。这可能会给希望在后处理步骤中利用事务元数据来排序更改事件的用户带来困难。
Debezium 2.6 for Informix 现在会将日志序列号 (LSN) 追加到事务标识符,以便用户可以根据事务元数据轻松地对更改事件进行排序。事务标识符字段现在将使用格式 `
{
"status": "BEGIN",
"id": "571:53195829",
...
} {
"status": "END",
"id": "571:53195832",
...
} {
...
"source": {
"id": "571:53195832"
...
}
} 支持 Spanner `NEW_ROW_AND_OLD_VALUES` 值捕获类型
Google Spanner 的值捕获类型负责控制更改流如何在事件流中表示更改数据,并在构建更改流时进行配置。
Spanner 引入了一种新的值捕获模式,称为 `NEW_ROW_AND_OLD_VALUES`,它负责在任何列发生更改时捕获跟踪列的所有值,无论是否修改。此新模式是 `NEW_ROW` 的改进,因为它还包括旧值的捕获,使其与其他 Debezium 连接器中的典型行为一致。
新的任意负载格式
虽然用户通常使用基于 JSON、Avro、Protobuf 或 CloudEvents 的序列化,但可能存在使用更简单格式的理由。感谢社区对 DBZ-7512 的贡献,Debezium 可以配置为使用两种新格式,称为 `simplestring` 和 `binary`。
`simplestring` 和 `binary` 格式在 Debezium Server 中使用 `debezium.format` 配置进行设置。对于 `simplestring`,负载将序列化为主题中的单个 `STRING` 数据类型。对于 `binary`,负载将使用 `byte[]`(字节数组)序列化为 `BYTES`。
Debezium Server 的 TRACE 级别日志记录
Debezium Server 是 Debezium 源连接器的现成运行时,它使用 Quarkus 框架来管理源和宿连接器的部署。正如大多数遇到过疑问或 Bug 的 Debezium Server 用户所知,我们经常要求提供 TRACE 级别的日志,而这通常很困难,因为由于日志的最低级别是 Quarkus 的构建时配置,需要完全重新构建 Debezium Server。
从 Debezium 2.6.0.CR1 版本及以后,将不再需要。默认情况下,构建时配置已调整为包含 TRACE 日志级别,因此在未来,用户只需将日志级别设置为 TRACE 并重启 Debezium Server 即可获取日志(DBZ-7369)。
Google Pub/Sub 排序键支持
Debezium Server 的 Google Pub/Sub Sink 适配器在 Debezium 2.6 中进行了一次小更新。如果您正在流式传输具有外键关系的更改,您可能想知道是否可以指定排序键以维护外键约束。
Debezium 2.6 为 Google Pub/Sub Sink 适配器引入了一个新的可配置属性 `ordering.key`,它允许 Sink 适配器使用连接器配置中提供的外部排序键来处理事件,而不是使用基于事件键的默认行为(DBZ-7435)。
CloudEvents 模式名称自定义
使用模式注册表时,事件模式需要注册一个名称,以便在后续的管道查询中进行查找。因此,当将 CloudEvents 格式的消息与模式注册表配对时,同样适用,而在 Debezium 2.6 中,您可以显式控制名称的注册方式。
默认情况下,CloudEvent 消息的模式将由转换器自动生成。但是,如果自动生成的模式名称不足,您可以通过指定 `dataSchemaName` 来调整配置,该值可以设置为 `generate`(默认行为)或 `header` 以直接从指定的事件头字段拉取模式名称。
时间戳转换器改进
Debezium 在 Debezium 2.4 中发布了新的 `TimezoneConverter`,允许用户将目标设置为特定时区,并将出站负载时间值转换为该目标时区。最初的实现专门限制为仅允许转换负载的 `before` 或 `after` 部分的值;然而,由于 DBZ-7022 的改进,该转换器现在可用于转换元数据中的其他基于时间的字段,例如 `source` 信息块中的 `ts_ms`。
此更改有助于在运行连接器的 JVM 使用的时区与数据库不同,并且 `envelope ts_ms` - `source ts_ms` 的计算导致时区差异的情况下,改进延迟指标的计算。通过使用 `TimezoneConverter` 转换元数据字段,您可以轻松计算这两个字段之间的延迟,而不会受到时区干扰。
信号表水印元数据
增量快照过程需要一个信号表来写入开启/关闭标记,以协调更改边界与交易日志中记录的数据(除非您使用的是 MySQL 的只读版本)。在某些情况下,用户希望能够跟踪窗口时间槽,知道窗口何时打开和关闭。
从 Debezium 2.6 开始,信号表中的 `data` 列将填充时间窗口的详细信息,允许用户获取窗口何时打开和关闭。以下显示了两个信号标记各自 `data` 列的详细信息:
{"openWindowTimestamp": "<window-open-time>"} {"openWindowTimestamp": "<window-open-time>", "closeWindowTimestamp": "<window-close-time>"} Debezium Server 的 TRACE 级别日志记录
Debezium Server 是 Debezium 源连接器的现成运行时,它使用 Quarkus 框架来管理源和宿连接器的部署。正如大多数遇到过疑问或 Bug 的 Debezium Server 用户所知,我们经常要求提供 TRACE 级别的日志,而这通常很困难,因为由于日志的最低级别是 Quarkus 的构建时配置,需要完全重新构建 Debezium Server。
使用 Debezium 2.6+ 版本,将不再需要。默认情况下,构建时配置已调整为包含 TRACE 日志级别,因此在未来,用户只需将日志级别设置为 TRACE 并重启 Debezium Server 即可获取日志(DBZ-7369)。
Cassandra 可配置分区模式
当 Debezium Cassandra 连接器读取提交日志时,事件按顺序处理并添加到队列中。如果存在多个队列,事件会根据提交日志文件的哈希值分布在这些队列之间。这导致事件可能以非时间顺序发出。
在 Debezium 2.6 中,Cassandra 连接器的哈希算法现在使用分区列名来解析插入的队列索引。这应该提供更稳定的插入顺序,以便事件按正确的顺序发出。
已添加一个新的配置选项以选择加入此新行为。Debezium 用户可以添加新的配置属性 `event.order.guarantee.mode` 并设置为 `partition_values` 来利用此新模式。默认情况下,该属性保留旧行为,使用 `commitlog_file` 的默认值。
其他修复
总共 249 个问题 在 Debezium 2.6 中得到解决。更改列表也可以在我们的 发布说明 中找到。非常感谢所有为本次发布辛勤工作的社区贡献者:Akula、Amirmohammad Sadat Shokouhi、Andreas Martens、Andrey Pustovetov、Animesh Kumar、Anisha Mohanty、Artem Shubovych、Arthur Le Ray、Bob Roldan、Breno Moreira、Bue Von Hun、Chris Cranford、Ciaran O’Reilly、Clifford Cheefoon、Enzo Cappa、Gunnar Morling、Harvey Yue、Ilyas Ahsan、Inki Hwang、Jakub Cechacek、James Johnston、Jan.Lieskovsky、Jiri Kulhanek、Jiri Novotny、Jiri Pechanec、Jordan Pittier、Lars M. Johansson、Lourens Naudé、Luca Scannapieco、Mario Fiore Vitale、Martin Medek、Mickael Maison、Mostafa Ghadimi、Nancy Xu、Nick Golubev、Ondrej Babec、Peter Hamer、René Kerner、Richard Harrington、Robert Roldan、Roman Kudryashov、Sean Wu、Sergey Eizner、Sergey Ivanov、Shuran Zhang、Stavros Champilomatis、Thomas Thornton、V K、Vadzim Ramanenka、Vaibhav Kushwaha、Vincenzo Santonastaso、Vojtech Juranek、Xianming Zhou、leoloel,以及 حمود سمبول!
展望与下一步?
随着 Debezium 2.6 的发布,团队已经开始着手 Debezium 2.7 的工作,该版本将于今年 6 月发布。即将发布的新版本将包含独立的 MariaDB 连接器、用户友好的偏移量操作、关系型连接器的只读增量快照,以及可能提前预览 Debezium Server UI 的第一个概念验证。
下一个季度同样雄心勃勃,我们希望您能加入我们的讨论。您可以在项目的 2024 年 路线图 上阅读所有详细信息,并通过 邮件列表 或 Zulip 聊天 与我们联系。我们非常希望能听到您对路线图的反馈以及任何未包含的建议。
这个即将到来的季度将标志着 Debezium 2.x 系列的最后一个版本 Debezium 2.7。随着新的主要版本即将发布,现在是代码清理和弃用移除的时候了。如果您还没有花时间审查可能已计划移除的功能,我们请求您尽快进行审查并提供反馈。我们希望确保过渡到 Debezium 3 尽可能实现即插即用,但这离不开您的帮助。
春天万物复苏,别忘了停下来欣赏玫瑰。下次见……
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。