随着夏季的结束,我们进入秋季,天气转凉,团队辛勤地准备着 Debezium 的下一个主要里程碑。我很荣幸地宣布下一个次要版本的发布,即 Debezium 2.4.0.Final。
随着团队开始新的开发迭代之旅,让我们花点时间回顾一下 Debezium 2.4 中包含的所有新功能、更改和改进,包括 231 个问题的解决,来自 68 位独特贡献者的贡献。
重大变更
虽然我们尽量避免在次要版本之间发生任何潜在的破坏性更改,但有时这类更改是不可避免的。升级到 Debezium 2.4 包含总共 10 项独特的破坏性更改。
- MySQL
-
-
当使用
bigint.unsigned.handling.mode配置连接器为precise时,BIGINT数据类型的精度没有正确设置。如果您使用带有上述配置设置的 schema registry,此版本可能导致 schema 不兼容,并可能需要调整注册表(DBZ-6714)。
-
- MongoDB
- Oracle
- Vitess
-
-
更改事件结构已有所修改,
source信息块现在包含一个标识事件源分片的新字段(DBZ-6617)。 -
以
_bin结尾的排序规则被推断为VARBINARY数据类型,并作为二进制数据发出;但是,对于基于字符的列来说这是不正确的。如果您使用这些排序规则类型和 schema registry,这可能导致 schema 不兼容,并可能需要一些注册表调整(DBZ-6748)。 -
以前,Schema 更改会应用于所有分片,而不是独立处理每个分片。如果您使用的是
DefaultTopicNamingStrategy或其派生类,则应切换到TableTopicNamingStrategy以保留先前使用的相同主题命名。(DBZ-6775) -
默认情况下,只有一部分错误会被重试。此行为已更改,现在默认重试所有错误,只有一部分预定义错误条件不会被重试(DBZ-6944)。
-
- Debezium 服务器
-
-
Debezium Server 现在包含所有 Cassandra 连接器变体,并增加了一个新的环境变量
EXTRA_CONNECTOR来控制使用哪个特定的 Cassandra 连接器。此变量可设置为dse、cassandra-3或cassandra-4(DBZ-6638)。
-
改进和更改
在本节中,我们将带您全面了解 Debezium 2.4 中的所有新功能和改进。
核心
临时阻塞快照
增量快照大约在两年前的 Debezium 1.6 中首次推出,并且在社区中一直非常受欢迎,用于处理各种重新快照用例。但是,在某些用例中,读事件与创建、更新和删除事件的相互交织可能不是理想的,甚至不被某些消费者应用程序支持。对于这些用例,Debezium 2.4 引入了临时阻塞快照。
临时阻塞快照的工作方式与临时增量快照非常相似;然而,有一个主要区别。快照仍然通过发送信号给 Debezium 来触发;然而,当连接器处理信号时,主要区别在于流式传输被暂停,直到快照过程运行完毕。这意味着您将不会收到一系列读事件与创建、更新或删除事件交织在一起。这也意味着我们将以类似于传统快照的方式处理快照,因此吞吐量通常会比增量快照更高。
| 请注意,临时阻塞快照会在执行快照期间暂停读取事务日志。这意味着传统快照对事务日志可用性的要求同样适用于使用此类临时快照模式。当流式传输恢复时,如果所需的事务日志已被删除,连接器将引发错误并停止。 |
启动临时阻塞快照的信号与其临时增量快照的对应信号非常相似。下面的信号显示了带有条件的快照特定表的负载,但它使用新的阻塞快照而不是增量快照。
{
"type": "execute-snapshot",
"data": {
"data-collections": ["public.my_table"],
"type": "BLOCKING", (1)
"additional-condition": "last_update_date >= '2023-01-01'"
}
} | 1 | 使用 BLOCKING 而不是 INCREMENTAL 来区分这两种临时快照模式。 |
错误处理
一些 Debezium 连接器以前使用过连接器属性 errors.max.retries。此属性控制 Debezium 连接器故障异常被显式包装在 RetriableException 中的频率,但连接器将原始异常抛给运行时。虽然这听起来与 Kafka Connect 的 errors.retry.timeout 类似,但这实际上为用户提供了一种跨多个 Debezium 运行时(包括 Kafka Connect、Debezium Server 和 Debezium Embedded)处理重试的通用方法。
初始快照通知
Debezium 的新通知子系统提供了一种简单的方式,可以将第三方工具和应用程序与 Debezium 集成,以洞察正在进行的变更数据捕获过程,超出了传统的 JMX 方法。在 2.4 版本中,通知子系统现在增加了通知初始快照状态的能力(DBZ-6416)。
初始快照通知将以 Initial Snapshot 的 aggregatetType 发出,并包含一个 type 字段,该字段显示快照的当前状态。可能的值包括:STARTED、ABORTED、PAUSED、RESUMED、IN_PROGRESS、TABLE_SCAN_COMPLETED 和 COMPLETED。
带有 JSON 用户数据的 JMX 通知
Debezium 2.4 改变了 JMX 通知提供用户数据的方式。在以前的版本中,通知使用了 toString() 风格的实现,虽然有效,但与其他更结构化的格式(如 JSON)相比,它不提供任何好的向前或向后兼容性语义。
今后,JMX 通知中的用户数据将以 JSON 格式提供,使其更容易、更可靠地解析,并为未来的可扩展性提供更好的支持,同时减少对向后兼容性的担忧。我们希望这能使此功能在未来更容易使用,并欢迎任何额外的反馈。
通知
所有通知事件现在都将包含一个时间戳(DBZ-6793)。
源到目标列名传播
通常,当被 JDBC 连接器等目标连接器消费时,列名直接映射到字段名,反之亦然。但是,在某些情况下,序列化技术(如 Avro)对字段命名约定有非常严格的规则。当数据库表中的列名与序列化规则的命名约定冲突时,Debezium 会在事件中重命名该字段,使其符合序列化的规则。这通常意味着字段会被加上下划线,或者无效字符会被下划线替换。
这可能对某些类型的目标(如 JDBC 目标连接器)造成问题,因为目标无法轻松推断目标表中原始列名,也无法在事件字段名和列名不同时进行充分映射。这通常意味着用户必须在目标端使用转换链来重建事件字段,使其命名代表源。
Debezium 2.4 引入了一种最小化甚至可能完全避免这种情况的方法,通过将原始列名作为字段 schema 参数进行传播,这与我们处理数据类型、精度、标度和长度的方式非常相似。Schema 参数 __debezium.source.column.name 现在在启用列或数据类型传播时包含原始列名。
| Debezium JDBC 目标连接器已经支持列和数据类型传播,允许目标连接器更准确地推断列类型、长度、精度和标度。 通过这个新功能,当提供此参数时,JDBC 目标连接器将自动使用此参数中的列名,以确保目标表使用与源相同的列名创建,即使在使用 Avro 或类似技术时。这意味着在使用 Debezium JDBC 目标连接器时不需要进行任何转换。 |
时区转换
我们经常从社区听到的一个常见请求是,允许使用除 UTC 以外的其他时区来发出时间列。Debezium 通过使用 CustomConverter 来更改时间列默认发出方式,或者编写您自己的单消息转换 (SMT),来支持这一点;然而,这些方法可能不适合所有人。
Debezium 2.4 现在附带了一个全新的时区转换器,该转换器允许您精细控制发出的事件中哪些时间列可以从 UTC 转换为您管道所需的任何时区。要开始使用此新转换器,请将以下基本配置添加到您的连接器中。
{
"transforms": "tz",
"transforms.tz.type": "io.debezium.transforms.TimezoneConverter",
"transforms.tz.converted.timezone": "America/New_York"
} 通过指定上述配置,所有以 UTC 发出的时间列都将从 UTC 转换为 America/New_York 时区。但您不仅限于更改所有时间字段的时区,还可以使用 include.fields 属性来定位特定字段,如下所示。
{
"transforms": "tz",
"transforms.tz.type": "io.debezium.transforms.TimezoneConverter",
"transforms.tz.converted.timezone": "America/New_York",
"transforms.tz.include.fields": "source:customers:created_at,customers:updated_at"
} 在上面的示例中,第一项将转换 created_at 字段,其中源表名是 customers,而后者将转换 updated_at 字段,其中主题名是 customers。此外,您还可以使用 exclude.fields 排除字段的转换,以便将转换应用于除特定子集以外的所有字段。
{
"transforms": "tz",
"transforms.tz.type": "io.debezium.transforms.TimezoneConverter",
"transforms.tz.converted.timezone": "America/New_York",
"transforms.tz.exclude.fields": "source:customers:updated_at"
} 在上面的示例中,所有时间字段都将转换为 America/New_York 时区,除非源表名是 customers 且字段是 updated_at。
您可以在文档中找到有关此新转换器的更多信息,我们非常希望听到您的反馈。
MongoDB
集群范围的权限
监视单个数据库或集合时不再需要集群范围的权限(DBZ-6182)。
聚合管道的可配置顺序
Debezium 2.4 现在提供了一种控制变更流管道聚合顺序的方法。这对于正在聚合可能导致管道问题的特定文档(如大型文档)至关重要。
默认情况下,连接器先应用 MongoDB 内部管道过滤器,然后应用用户构造的过滤器;然而,这可能导致大型文档进入管道,并且如果文档超过内部 16Mb 限制,MongoDB 可能会抛出错误。在这些用例中,连接器现在可以配置为首先应用 cursor.pipeline 定义的用户阶段来过滤此类用例,以避免管道因 16Mb 限制而失败。
要实现这一点,只需将以下配置应用于连接器。
{
"cursor.pipeline.order": "user_first",
"cursor.pipeline": "<custom-pipeline-filters>"
} 有关更多详细信息,请参阅文档。
自定义身份验证
在特定环境(如 AWS)中,您需要使用 AWS IAM 基于角色的身份验证来连接到 MongoDB 集群;然而,这需要使用 AWS_CREDENTIAL_PROVIDER 设置属性。此提供程序负责创建会话并提供凭据。
为了在这些环境中更无缝地集成,添加了一个新的配置属性 mongodb.authentication.class,允许您直接在连接器配置中定义凭据提供程序类。如果您需要使用此类提供程序配置,现在可以在连接器配置中添加以下内容。
{
"mongodb.authentication.class": "<fully-qualified-class-name-to-use>",
"mongodb.user": "username",
"mongodb.password": "password"
} 此外,如果身份验证需要使用除 admin 以外的其他数据库,连接器配置还可以包含 mongodb.authsource 属性来控制应使用哪个身份验证数据库。
有关更多信息,请参阅文档。
过滤匹配模式
为 MongoDB 添加了一个新的配置属性 filtering.match.mode,允许指定如何处理过滤。此属性可以设置为 regex 或 literal(DBZ-6973)。
MongoDB 7
MongoDB 7.0 于上个月发布,Debezium 2.4 支持 MongoDB 7。
如果您想将您的环境升级到 MongoDB 7,您可以轻松做到,因为 Debezium 2.4+ 完全兼容新版本。如果您遇到任何问题,请告知我们。
并行增量快照
自 Debezium 1.x 推出增量快照以来,在捕获数据库事务的并发更改的同时增量快照现有数据的过程一直是一个单线程活动。添加新功能时,通常会先关注基础,然后在此基础上进行构建,这正是 MongoDB 的情况。
身份验证更改
支持 TC MongoDB 部署的身份验证(DBZ-6596)。
MySQL
备用驱动程序支持
为了在 AWS 上使用 IAM 身份验证,需要一个特殊的 MySQL 驱动程序来提供此类功能。通过 Debezium 2.4,您现在可以提供此特定驱动程序的引用,连接器将使用该驱动程序而不是连接器附带的默认驱动程序。
例如,要使用 AWS 上的 IAM 身份验证进行连接,需要进行以下配置。
database.jdbc.driver=software.aws.rds.jdbc.mysql.Driver
database.jdbc.protocol=jdbc:mysql:aws database.jdbc.driver 指定了连接器应加载并用于与 MySQL 数据库通信的驱动程序。database.jdbc.protocol 是一个辅助配置属性,可能并非在所有情况下都需要。它默认为 jdbc:mysql,但由于 AWS 需要 jdbc:mysql:aws,因此允许您在配置中指定此派生。
我们很乐意听到您的反馈,以及类似的功能是否可能在其他场景中有用。
并行快照 Schema 事件
感谢 Harvey Yue 的贡献(DBZ-6472),MySQL 连接器将在其快照阶段使用并行化来生成 Schema 事件。这应该能提高捕获数据库中大量表 Schema 的整体性能。我们计划研究如何将此功能扩展到其他关系型连接器。
PostgreSQL
PostgreSQL 16
PostgreSQL 于一周多前发布了 PostgreSQL 16 的即时版本,我们很高兴地宣布 Debezium 2.4 将支持该版本。
| PostgreSQL 16 引入了从备用服务器进行逻辑复制;然而,Debezium 尚未测试此功能,它将在 Debezium 的后续版本中引入。目前,逻辑复制仍然只能通过主服务器支持。 |
TimescaleDB 支持
TimescaleDB 是一个开源的时间序列数据库,基于 PostgreSQL。这意味着支持 TimescaleDB 的大部分功能直接来源于现有的 PostgreSQL 连接器;然而,TimescaleDB 的某些方面,如块 (chunks)、超表 (hypertables) 和聚合 (aggregates) 则不是。
因此,如果您想开始使用 Debezium 2.4 和 TimescaleDB,集成需要结合 PostgreSQL 连接器和一个新的 TimescaleDb 单消息转换 (SMT)。这两个结合提供了从 TimescaleDB 环境流式传输更改的能力,并根据块、超表和聚合生成适当的表名。
TimescaleDb 转换器作为 io.debezium.connector.postgresql.transforms.timescaledb 可用,它负责在处理块、超表和聚合时调整最终的主题名称。此外,此转换器会将元数据头添加到更改事件中,以便您了解原始块名称、块表、超表 Schema 和表名。
Oracle
嵌入式 Infinispan 全局配置支持
Oracle 连接器支持三种不同的缓冲技术,一种基于 JVM 堆,另外两种基于使用 Infinispan 的堆外存储。在使用 Infinispan 时,您可以选择使用远程集群,其中缓存通过远程连接存储和管理,或者使用嵌入式集群,其中集群由连接器本身在本地管理。
在使用远程 Infinispan 集群时,集群配置是在 Infinispan 安装本身中完成的,这通常被称为全局或集群配置。然而,在使用嵌入式 Infinispan 集群时,Debezium 仅使用嵌入式集群的默认配置,这可能并不总是为每个环境提供所有必需的行为。
Debezium 2.4 引入了一个新的配置属性 log.mining.buffer.infinispan.cache.global。此属性允许指定 Infinispan “全局”或“集群”配置的 XML 配置。
<infinispan>
<threads>
<blocking-bounded-queue-thread-pool
max-threads="10"
name="myexec"
keepalive-time="10000"
queue-length="5000" />
</threads>
</infinispan> 使用 Debezium 2.4,如果您使用 Infinispan 嵌入式缓冲区,您现在可以安全地配置 Infinispan 的整体嵌入式全局配置,这可以帮助您在使用嵌入式 Infinispan 引擎时优化和提高整体性能。
最大事务年龄指标
Oracle 连接器为 LogMiner 提供了大量的指标,包括 OldestScn 指标,表示连接器事务缓冲区中最老的系统更改号。这个 SCN 对于了解事务相对于当前系统更改号 CurrentScn 仍然缓冲了多远非常有用。然而,系统更改号仅仅是数字值,需要使用数据库函数调用才能知道更改何时发生。
从 Debezium 2.4 开始,连接器还将跟踪最旧系统更改号的年龄,提供一个名为 OldestScnAgeInMilliseconds 的新指标。此指标通过获取 OffsetScn 的时间戳,并计算该时间与指标查询时间之间的差值来计算,从而估算缓冲区中尚未提交或回滚的最旧事务的大致年龄(以毫秒为单位)。
如果您还有其他感兴趣的指标,请联系我们。
OpenLogReplicator 摄入方法
Debezium for Oracle 连接器传统上提供两个适配器,一个用于 Oracle XStream,另一个用于直接集成 Oracle LogMiner。虽然每个适配器都有其优点,并且在功能和对各种数据类型及用例的支持方面都非常成熟,但我们希望探索一种完全不同的捕获更改的方式。
Debezium 2.4.0.Beta2 引入了一个新的、实验性的 Oracle 摄入适配器,基于OpenLogReplicator。该适配器直接与 OpenLogReplicator 进程集成,以类似 XStream 实现作为 Oracle GoldenGate 客户端的方式创建更改事件。
OpenLogReplicator 是一个独立的进程,它必须运行在 Oracle 数据库服务器上,或者可以独立于数据库服务器运行,但需要通过 TCP/IP 与数据库进行直接通信,并直接读取 Oracle 重做日志和归档日志文件。OpenLogReplicator 也不提供任何预构建的二进制文件,因此代码必须直接从源代码构建,或者部署在可以远程通过文件共享访问数据库及其文件的容器镜像中。
一旦安装了 OpenLogReplicator,设置需要以下步骤:
-
配置 OpenLogReplicator 的配置
OpenLogReplicator.json。 -
配置 Oracle 连接器以使用 OpenLogReplicator 适配器。
目前,Debezium for Oracle 连接器期望 OpenLogReplicator 配置使用非常具体的设置,以便数据以正确的序列化方式传输到连接器。示例配置显示了 Debezium 能够正确摄入数据必须设置的关键配置参数。
当 OpenLogReplicator 配置完成后,您应该会看到 OpenLogReplicator 启动,并显示以下内容:
OpenLogReplicator v1.2.1 (C) 2018-2023 by Adam Leszczynski (aleszczynski@bersler.com), see LICENSE file for licensing information, arch: x86_64, system: Linux, release: 6.4.11-200.fc38.x86_64, build: Debug, modules: OCI Probobuf
adding source: ORACLE (1)
adding target: DBZ-NETWORK (2)
writer is starting with Network:0.0.0.0:9000 (3) | 1 | 在 OpenLogReplicator.json 中配置的源别名。 |
| 2 | 在 OpenLogReplicator.json 中配置的目标别名。 |
| 3 | OpenLogReplicator 正在监听的主机和端口。 |
最后,要配置连接器,请设置以下连接器配置选项:
{
"database.connection.adapter": "olr",
"openlogreplicator.source": "<source-alias>", (1)
"openlogreplicator.host": "<host>", (2)
"openlogreplicator.port": "<port>" (3) | 1 | 在 OpenLogReplicator.json 配置中定义的要使用的源别名。 |
| 2 | 运行 OpenLogReplicator 的主机。 |
| 3 | OpenLogReplicator 正在监听的端口。 |
当连接器启动并开始流式传输时,它将连接到 OpenLogReplicator 进程的网络端点,与序列化进程协商连接,然后开始接收重做日志条目。
我们将在接下来的几周内发布另一篇博客文章,详细介绍 OpenLogReplicator,为最终发布做准备。在此期间,请随意尝试新的摄入方法,我们非常希望听到您的反馈。
| 由于此摄入方法是实验性的,存在一些已知限制,请查看连接器文档了解详情。 |
XML 和 RAW 数据类型
Debezium 2.4 支持几种新的 Oracle 数据类型,包括 XML_TYPE 和 RAW(DBZ-3605)。支持 XML 需要两个新的 Oracle 依赖项:xdb 和 xmlparserv2。这些依赖项不可重新分发,因此它们默认不包含在连接器插件存档中,这与连接器的驱动程序类似。您必须像驱动程序依赖项一样,直接从 Maven Central 或 Oracle 获取它们。
此外,XML 的工作方式类似于 CLOB 和 BLOB 数据类型;因此,必须将连接器配置为 lob.enabled 设置为 true 才能摄入 XML 更改。我们很乐意听到您对这项新功能的反馈,因为它已经提出了很长一段时间。
SQL Server
心跳改进
数据库在一段时间内没有发生任何相关更改的情况并不少见,无论是由于不活动还是发生的更改根据配置对连接器不感兴趣。在这些情况下,至关重要的是连接器管理的偏移元数据在这些期间保持与偏移存储同步,以便连接器的重新启动能够按预期工作。
在 Debezium 2.4 中,如果 SQL Server 更改捕获循环未找到任何更改,或者发生的更改与连接器无关,则在启用心跳的情况下,连接器将继续发出心跳事件。这应该能提高在各种用例中偏移存储中偏移的可靠性。
JDBC
改进的表命名策略
Nicholas Fwang 添加了将更改事件 source 信息块中的值作为连接器配置属性 table.name.format 的一部分引用的功能。如果您想引用此类字段,只需在配置中使用 ${source.<field-name>} 即可,并将使用字段的值(DBZ-6595)。
基于头的主键
Roman Kudryashov 贡献了从更改事件上定义的头中解析行主键的功能。要使用此新功能,请将连接器配置属性 primary.key.mode 指定为 record_header。如果头值是原始类型,您将需要定义一个 primary.key.fields 配置,就像事件记录键是原始类型一样。如果头值是 struct 类型,默认情况下将使用该结构的所有字段,但指定 primary.key.fields 属性允许您从头中选择一部分字段作为键(DBZ-6602)。
SQL Server 标识插入
每个数据库处理向标识列插入值的方式都不同。对于 SQL Server,这需要在插入之前显式启用 IDENTITY_INSERT,并在之后禁用此功能。通过 Debezium 2.4,Debezium JDBC 目标连接器为目标数据库提供了此支持。
为了利用基于标识的插入,JDBC 目标连接器必须配置一个名为 dialect.sqlserver.identity.inserts 的新基于方言的属性,该属性可以设置为 true 或 false。默认情况下,此功能设置为 false,如果您希望插入到基于标识的列中,则必须启用它。
启用后,所有插入和更新操作将包装如下:
SET IDENTITY_INSERT <table-name> ON;
<the insert or upsert statement>
SET IDENTITY_INSERT <table-name> OFF; Spanner
等待初始化任务超时
由于某些条件,Spanner 连接器可能无法在初始化期间从 START_INITIAL_SYNC 状态推进。经过 Nancy Xu 的调查,引入了一个新的配置选项来提供可配置的超时。这可以通过将 connector.spanner.task.await.initialization.timeout 设置为所需的毫秒数来完成。
GKE 工作负载身份支持
Google Kubernetes Engine (GKE) 支持身份工作负载,允许您使用比传统基于 JSON 的密钥更安全的身份验证机制。在 Debezium 2.4 中,当没有显式设置 JSON 密钥时,Spanner 连接器将自动默认为 GKE 工作负载身份验证。感谢laughingman7743 作为DBZ-6885 的一部分所做的努力。
UI
连接器指标
Debezium UI 项目允许您使用基于 Web 的界面轻松地将任何 Debezium 连接器部署到 Kafka Connect。此版本改进了界面,在主连接器列表视图中包含了一些连接器指标。我们非常希望收到您对这一变化的反馈,并欢迎您对其他有用的指标提出建议(DBZ-5321)。
其他更改
-
Debezium Outbox 在使用 CloudEventsConverter 时无法正常工作 DBZ-3642
-
增量快照数据集合未去重 DBZ-6787
-
MongoDB 连接器不再需要集群范围的权限 DBZ-6888
-
时区转换无法工作 DBZ-6940
-
MySQL Kafka 信号文档不正确 DBZ-6941
-
使用 additional-condition 中的 OR 条件时出现无限循环 DBZ-6956
-
过滤指定 DDL 事件的逻辑已回滚 DBZ-6966
-
DDL 解析器不支持 NOCOPY 关键字 DBZ-6971
-
减少处理再平衡事件所花费的时间 DBZ-6974
-
(MySQL/MariaDB) 解析异常:带有空格的用户规范 DBZ-6978
-
RecordsStreamProducerIT#shouldReceiveChangesForInfinityNumericWithInfinity 在 Postgres < 14 上失败 DBZ-6986
-
PostgresConnectorIT#shouldAddNewFieldToSourceInfo 可能会失败,因为 Schema 可能不存在 DBZ-6987
非常感谢所有为 Debezium 2.4 做出贡献的社区成员:Vincenzo Santoynastaso, Adam Strickland, Alisa Houskova, Anatolii Popov, Andreas Martens, Andy Pickler, Anil Dasari, Animesh Kumar, Anisha Mohanty, Ant Kutschera, Artur Gukasian, Balint Bene, Bob Roldan, Breno Moreira, Chao Tian, Chris Beard, Chris Cranford, Chris Egerton, Cohen, David Remy, Emre Akgün, Eric Pangiawan, Fai Ho Fu, Gurps Bassi, Hang Ruan, Harvey Yue, Hossein Torabi, Indra Shukla, Inki Hwang, Jakub Cechacek, Jeremy Ford, Jiri Novotny, Jiri Pechanec, Jochen Schalanda, Kaustuv chakrabarti, M. Gökhan Akgül, Mario Fiore Vitale, Martin Medek, Massimo Fortunat, Nancy Xu, Nikhil Benesch, Nir Levy, Ondrej Babec, Paul Cheung, Rajendra Dangwal, René Kerner, Robert Roldan, Roman Kudryashov, Ronak Jain, Ryan van Huuksloot, Seo Jae-kwon, Sergey Eizner, Shuran Zhang, Stefan Miklosovic, Stein Rolevink, Sun Xiao Jian, Thomas Thornton, Tomoyuki Nakamura, Vojtěch Juránek, Wu Zhenhua, Xiaojian Sun, Yanjie Wang, Yashashree Chopada, Zheng Wang, david remy, ibnubay,以及 tison!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。