Flink ORACLE CDC不支持CLOB类型吗? 2023-05-12 08:42:22.744 ERROR [hange-event-source-coordinator] i.d.r.TableSchemaBuilder:(269) - Failed to properly convert data value for 'ORARACB.KQGLXT.WB6_META.META_CONTENT' of type CLOB for row [actionItem, Grid, oracle.sql.CLOB@4a17abb9, 45]: org.apache.kafka.connect.errors.DataException: Invalid value: null used for required field: "META_CONTENT", schema type: STRING at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:220) at org.apache.kafka.connect.data.Struct.put(Struct.java:216) at io.debezium.relational.TableSchemaBuilder.lambda$createValueGenerator$5(TableSchemaBuilder.java:265) at io.debezium.relational.TableSchema.valueFromColumnData(TableSchema.java:141) at io.debezium.relational.RelationalChangeRecordEmitter.emitReadRecord(RelationalChangeRecordEmitter.java:85) at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:48) at io.debezium.pipeline.EventDispatcher.dispatchSnapshotEvent(EventDispatcher.java:166) at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEventsForTable(RelationalSnapshotChangeEventSource.java:375) at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEvents(RelationalSnapshotChangeEventSource.java:306) at io.debezium.relational.RelationalSnapshotChangeEventSource.doExecute(RelationalSnapshotChangeEventSource.java:136) at io.debezium.pipeline.source.AbstractSnapshotChangeEventSource.execute(AbstractSnapshotChangeEventSource.java:69) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:113) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecu
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Apache Flink 的 Oracle CDC (Change Data Capture) 功能通常是通过Debezium这样的数据捕获工具实现的。根据您提供的错误信息,问题在于Debezium在处理Oracle数据库中的CLOB类型字段时遇到了困难,因为它试图将CLOB类型的值转换为Kafka Connect的STRING类型,但失败了,因为CLOB可能包含大数据或非文本内容,而STRING类型在很多情况下有长度限制且预期是常规文本。
截至我所知,早期版本的Debezium确实存在不支持大对象(如CLOB、BLOB)直接转换的问题。不过,随着社区的发展和更新,情况可能会有所变化。要解决这个问题,你可以考虑以下几个方案:
升级Debezium版本:首先确认你使用的Debezium版本,并查看其发行说明,了解是否有对CLOB类型的支持改进。如果最新版本提供了更好的支持,请尝试升级。
自定义转换器:开发一个自定义的Kafka Connect转换器,该转换器可以读取CLOB数据并将其转换成适合消息传输的格式,比如将其转换为Base64编码的字符串或者分块处理。这样可以绕过直接转换为STRING的限制。
使用外部存储:对于大型CLOB数据,考虑不直接将其作为变更事件的一部分发送,而是仅在事件中包含指向该数据的引用(例如,数据库ID或文件URL),然后在需要时单独检索这些大对象。
修改表结构:如果可能的话,评估是否可以将CLOB字段转换为更易于处理的类型,比如VARCHAR2(如果CLOB内容长度允许),但这可能会影响到原始数据的存储需求和查询性能。
查阅文档与社区:访问Debezium的官方文档和社区论坛,看看是否有其他用户遇到类似问题并分享了解决方案。有时候,特定配置或工作模式的调整就能解决问题。
请记得,在进行任何更改之前备份相关数据,并在测试环境中验证解决方案,以避免生产环境出现意外情况。