我很荣幸地宣布Debezium 2.1系列的第一个版本,开云体育官方注册网址2.1.0.Alpha1

Debe开云体育官方注册网址zium 2.1.0。Alpha1版本包括相当多的错误修复,但也有一些值得注意的改进和新功能,包括但不限于:

  • 支持PostgreSQL 15

  • Debezium引擎中的单个消息转换(SMT)谓词支持开云体育官方注册网址

  • 在MySQL表主题中捕获TRUNCATE作为更改事件

  • Oracle LogMiner性能改进

  • 新的基于redis的存储模块

让我们花点时间来更详细地研究其中的一些!

Debezium引擎中的SMT谓词支持开云体育官方注册网址

单个消息转换(smt)是变更事件生命周期的关键部分,它们可以将任意数量的消息传递模式应用于发出的变更事件。例如,一个数据库表可能有一个特开云体育电动老虎机定的列,该列作为Debezium的更改事件的一部分被触发,但是您希望该字段被排除,这样该字段就不会出现在Kafka内部的持久事件中。开云体育官方注册网址这可以使用单个消息转换(SMT)来完成。

但是,Debezi开云体育官方注册网址um会发出许多不同的事件类型,如心跳、模式更改和数据更改事件。这些事件中的每一个都有自己的事件结构,可能会出现这样的情况:特定的SMT应该只应用于特定的事件类型,或者特定的事件具有特定的标准。评估是否应该应用SMT的一种方法是在SMT本身内部进行评估,检查其事件类型或所有标准,以确定是否应该应用SMT,或者SMT是否应该原貌不变地返回事件。

Kafka Connect后来引入了一个概念叫做谓词,其中可以在连接器配置中指定一组外部规则,并且必须对这些规则进行评估,以确定是否应该为事件触发SMT或是否跳过SMT。这有巨大的好处,因为它允许开发人员编写非常具体的转换,专注于单一的突变,完全由用户决定是否应该应用或不使用SMT谓词

从Debezium 2.开云体育官方注册网址1开始,在使用Debezium引擎或Debezium服务器时,可以利用单消息转换(SMT)谓词的强大功能。一个示例配置可能是这样的:

#定义过滤器转换,将其链接到IsFoo谓词/规则debezium。开云体育官方注册网址transforms=Filter debezium.transforms.Filter.type=org.apache.kafka.connect.transforms.Filter debezium.transforms.Filter.predicate=IsFoo # Define the IsFoo predicate/rule debezium.predicates=IsFoo debezium.predicates.IsFoo.type=org.apache.kafka.connect.transforms.predicates.TopicNameMatches debezium.predicates.IsFoo.pattern=foo

加上这些开云体育官方注册网址debezium.predicates。*配置属性时,可以定义一组必须评估的规则,以确定是否过滤器SMT将在转换链中被触发或跳过。在上面的示例中,谓词检查事件的主题名称是否匹配喷火如果是这样的话过滤器变革将被点燃。如果主题名称不匹配喷火,过滤器跳过转换。

要阅读有关使用谓词选择性地应用单个消息转换(smt)的更多信息,请参阅:

捕获MySQL TRUNCATE作为更改事件

开云体育官方注册网址Debezium支持向信号a发出更改事件的概念截断表PostgreSQL和Oracle的场景。从Debezium 2.1开开云体育官方注册网址始,这种行为已经扩展到MySQL连接器。

默认情况下,连接器配置选项,skipped.operations,自动跳过截断事件,如果它们被检测到。这意味着在默认情况下,当连接器检测到此模式时,不会发出任何消息。为了支持此类事件的发射,skipped.operations配置属性必须指定值为没有一个属性的其他操作类型t(截断)类型。

一旦将连接器配置为为截断操作时,将向表主题发出新的数据更改事件类型。这些事件类型表示表或集合已被截断。事件的有效负载看起来像这样:

有效载荷: {: {},人事处tts_ms1465581029523

这里最值得注意的一点是截断事件不包含之前状态。

新的基于redis的存储模块

开云体育官方注册网址Debezium最近将其代码库的一部分模块化,围绕持久偏移量和模式历史,将其整合到一组模块中,支持基于File和Kafka的实现。在De开云体育官方注册网址bezium 2.1中,引入了一个新的模块来支持持久化到Redis数据存储。

以下全限定类名可用于将偏移量或模式历史持久化到Redis数据存储中:

  • io.开云体育官方注册网址debezium.storage.redis.offset.RedisOffsetBackingStore

  • io.开云体育官方注册网址debezium.storage.redis.history.RedisSchemaHistory

如果您手动安装了Debezium,请确保包含开云体育官方注册网址开云体育官方注册网址debezium-storage-redis如果它不存在,则在类路径上添加该构件,以便访问这些新实现。

有关此新实现可以配置哪些选项的信息,请参阅源配置部分的Debezium服务器文开云体育官方注册网址档,并寻找配置选项前缀:

  • 开云体育官方注册网址debezium.source.offset.storage.redis。*

  • 开云体育官方注册网址debezium.source.schema.history.internal.redis。*

其他修复

在这个版本中有相当多的错误修复和稳定性变化,一些值得注意的是:

  • 缺少快照挂起事务dbz - 5482

  • 使用快照。mode总是使用来自偏移量的SCNdbz - 5626

  • MongoDB多任务监测不一致dbz - 5629

  • 当lob时,带有NULL值的唯一索引抛出异常。Enabled为truedbz - 5682

  • 做增量快照时不排除列dbz - 5727

  • 在Oracle源连接器的表快照期间抛出NullPointerExceptiondbz - 5738

  • ARO中负载均衡ocp服务的主机名不可用dbz - 5753

  • 从捕获中排除Oracle压缩顾问表以避免无限循环dbz - 5756

  • 在定位阶段看到的LSN中不存在LSN“LSN{XYZ}”的消息dbz - 5792

接下来是什么?

因此,当我们继续在Debezium 2.1上工作时,我们已开云体育官方注册网址经能够在今天的发布中包含许多预期的更改,但我们仍然打算在年底之前交付一个新的单消息转换(SMT),用于生成更改事件增量。对于Debezium UI,还有一些期待已久的变化,比如支持编辑连接器配置等等。开云体育官方注册网址

您可以在我们最近更新的内容中找到这些信息,以及在2023年作为Debezium的一部分的其他内容开云体育官方注册网址路线图.我们计划在明年推出很多新功能,我们很乐意听到你对可能不在路线图上的东西的反馈或建议。如果有,请务必通过邮件列表与我们联系。

下次见…

克里斯克兰福德

克里斯是红帽公司的软件工程师。他以前是Hibernate ORM团队的成员,现在在Debezium工作。开云体育官方注册网址他住在北卡罗来纳州,距离红帽塔只有几个小时的路程。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题