Debezium日常分享系列之:Debezium 2.7.2.Final Released
Debezium 2.7 版本流的第二个维护版本 2.7.2.Final。此维护版本侧重于解决稳定性和回归问题,并进行了一些改进,例如使用 Informix 支持 DECIMAL§ 数据类型以及修复使用 JsonConverter 和 TruncateColumn 处理程序的回归。
重大变化
Debezium Server Kafka Sink
- 适配器在Kafka代理不可用时可能会无限等待。为了在达到超时时间时强制适配器失败,已经为sink适配器添加了一个可配置的超时时间。新的选项debezium.sink.kafka.wait.message.delivery.timeout.ms的默认值为30秒。如果默认值不满足您的需求,请相应地进行调整。
SQL Server
普通的JMX指标会注册一个taskId属性,因为SQL Server支持为每个数据库映射生成一个唯一的任务。不幸的是,JMX信号通道没有遵守这一点,导致每个任务启动JMX信号通道时出现了一些问题。这个问题已经修复,JMX信号通道的MBean名称现在在其名称中使用taskId来唯一标识每个数据库任务的信号通道,当使用单个连接器从多个SQL Server数据库中流式传输更改时。
新功能和改进
Informix DECIMAL§数据类型支持
- 在使用Debezium处理Informix数据库时,DECIMAL数据类型进行了一些改进。该数据类型可以带有或不带有精度。如果没有精度定义,连接器会将该列的类型解释为DECIMAL(16)。但是,用户也可以将列定义为DECIMAL(p,s),其中p是最大可达32位的精度,s是可变刻度。
- 为了使用精确小数处理模式表示此类十进制数的上限,Informix连接器必须进行调整,以利用Debezium VariableScaleDecimal语义类型。这使得Debezium在将此类浮点数序列化为Kafka消息时保留完整精度。
修复和稳定性改进
Debezium 2.7.2.Final 引入了多个错误修复和稳定性改进。
列截断现在受到JsonConverter的尊重
- 在早期的Debezium版本中,column.truncate.*功能基于截断配置返回了一个切片的ByteBuffer。虽然在使用Avro时这种方法有效,但是如果您的连接器配置使用JsonConverter,截断将不会被尊重,因为它操作整个底层数组而不是给定的切片。
- 在Debezium 2.7.2.Final中,这个问题已经得到修复,列截断逻辑现在明确地基于一个新数组创建一个ByteBuffer。这个变化使得JsonConverter能够在序列化到Kafka时尊重截断的列值。
snapshot模式的schema_only_recovery已经恢复
- 还有报道称,在Debezium 2.7中,schema_only_recovery快照模式无法正常工作。我们已经找到了问题,并且schema_only_recovery快照模式再次成为Debezium 2.7的可行选择。
- 温馨提示,在Debezium 2.7中,schema_only_recovery和schema_only已经被弃用,并在Debezium 3.0中被移除。在从Debezium 2.7升级到3.0时,请确保分别使用recovery或no_data快照模式。
Debezium Server中缺少MariaDB
- 一些用户可能已经注意到,随着Debezium 2.7中新增的官方MariaDB连接器,该连接器在Debezium Server发行版中缺失。很高兴告诉大家,Debezium 2.7.2.Final版本的构建中将包含MariaDB连接器,因此您将不再需要手动添加它。
将Oracle VECSYS表空间标记为内置
- 如果您尝试使用最新的Oracle 23ai镜像之一与Debezium配合使用,您会注意到出现了一个名为VECSYS的新表空间。该表空间包含了各种用于存储有关新的Oracle 23向量数据库和搜索功能的元数据的系统表。
- 我们发现,用于捕获表的DDL结构的DBMS_METADATA.GET_DDL函数与VECSYS表空间中的几个数据库对象不兼容,如果您不显式将schema.history.internal.store.only.captured.tables.ddl设置为true,将会导致连接器出现问题。为了解决这个问题,该表空间被标记为内置,意味着不再符合捕获的条件。