You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka Connect Debezium DB2连接器无法捕获XML类型列问题求助

解决Debezium同步DB2 XML列返回对象引用而非XML内容的问题

问题分析

核心问题在于DB2 JDBC驱动返回的XML列对象是com.ibm.db2.jcc.am.DC(DB2 XML类型的实现类),直接调用toString()只会返回对象的内存引用字符串,而非实际XML内容。同时你使用的Debezium 2.2.1对DB2 11.5.8的XML类型自动转换存在兼容问题,这也是初始警告出现的原因。

解决方案

修改自定义转换器的转换逻辑,调用DB2 XML对象专属方法提取实际XML字符串,代码示例如下:

import com.ibm.db2.jcc.DB2Xml;
import io.debezium.spi.converter.CustomConverter;
import io.debezium.spi.converter.ConverterRegistration;
import org.apache.kafka.connect.data.SchemaBuilder;

import java.sql.SQLException;
import java.util.Properties;

public class XmlConverter implements CustomConverter<SchemaBuilder, RelationalColumn> {
    private SchemaBuilder xmlSchema;

    @Override
    public void configure(Properties props) {
        xmlSchema = SchemaBuilder.string().name(props.getProperty("schema.name"));
    }

    @Override
    public void converterFor(RelationalColumn column, ConverterRegistration<SchemaBuilder> registration) {
        if ("xml".equalsIgnoreCase(column.typeName())) {
            registration.register(xmlSchema, value -> {
                if (value == null) {
                    return null;
                }
                // 强转为DB2 XML接口,调用getString()获取原始XML内容
                try {
                    return ((DB2Xml) value).getString();
                } catch (SQLException e) {
                    throw new RuntimeException("提取DB2 XML内容失败", e);
                }
            });
        }
    }
}

关键细节

  • DB2Xml是DB2 JDBC驱动定义的XML类型接口,com.ibm.db2.jcc.am.DC是它的实现类,强转后调用getString()可直接获取XML字符串。
  • 必须捕获SQLException,DB2 XML对象读取内容时可能抛出数据库相关异常。
  • 确保自定义转换器项目引入DB2 JDBC驱动依赖(以Maven为例):
<dependency>
    <groupId>com.ibm.db2</groupId>
    <artifactId>jcc</artifactId>
    <version>11.5.8.0</version>
</dependency>

连接器配置验证

在Debezium DB2连接器配置中正确指定自定义转换器:

# 自定义转换器配置
transforms=xmlConverter
transforms.xmlConverter.type=com.yourpackage.XmlConverter
transforms.xmlConverter.schema.name=com.yourcompany.XmlString

额外提示

若后续升级Debezium到2.3+版本,可重新测试官方自动转换逻辑——你参考的是2.3版本文档,但当前使用的是2.2.1,版本差异可能是初始警告的根源。

内容的提问来源于stack exchange,提问作者George Bernard Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:52:37