Flink CDC里这个是Kafka写入Doris,Doris表一条数据也没有,也开启了ck。有大佬可以提供下问题思路吗?com.selectdb.flink.sink.writer.JsonDebeziumSchemaSerializer [] - ddl can not do schema change:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的问题描述,Flink CDC 写入 Doris 时,Doris 表中没有数据,并且日志中出现了 ddl can not do schema change
的错误信息。以下是针对该问题的详细分析和解决思路:
从错误信息 ddl can not do schema change
可以推测,问题可能与以下因素相关: - Schema 不匹配:Flink CDC 数据流中的 Schema 与 Doris 表的 Schema 不一致,导致写入失败。 - DDL 操作限制:Doris 表可能不支持动态 Schema 变更,而 Flink CDC 数据流中包含了 DDL 操作(如表结构变更)。 - 数据格式问题:Flink CDC 数据流中的 JSON 格式可能未正确解析,导致 Doris 无法识别数据。
结合知识库资料,Flink Doris Connector 在将数据写入 Doris 时,需要确保数据源、转换逻辑和目标表的 Schema 完全匹配。如果 Schema 不匹配或存在动态变更,可能会导致写入失败。
ALTER TABLE
),需要在 Flink 作业中过滤掉这些操作,仅保留 DML 操作(如 INSERT
、UPDATE
、DELETE
)。sink.properties.format
:确保数据格式为 JSON 或其他 Doris 支持的格式。sink.properties.strip_outer_array
:如果数据流是数组格式,需要设置为 true
。sink.properties.schema-change
:如果 Doris 表支持 Schema 变更,可以尝试设置为 true
。如果 Flink CDC 数据流中包含 DDL 操作,可以通过以下方式过滤掉: - 在 Flink SQL 中使用 WHERE
子句过滤掉非 DML 操作的数据。 - 示例:
CREATE TABLE kafka_source (
data STRING,
op STRING
) WITH (
'connector' = 'kafka',
'topic' = 'your_topic',
'properties.bootstrap.servers' = 'your_kafka_broker',
'format' = 'json'
);
CREATE TABLE doris_sink (
id INT,
name STRING
) WITH (
'connector' = 'doris',
'fenodes' = 'your_doris_fenodes',
'table.identifier' = 'your_table',
'username' = 'your_username',
'password' = 'your_password'
);
INSERT INTO doris_sink
SELECT
CAST(data['id'] AS INT) AS id,
data['name'] AS name
FROM kafka_source
WHERE op = 'INSERT' OR op = 'UPDATE';
schema-change
参数:
sink.properties.schema-change=true
DataStream<String> processedStream = rawStream.map(json -> {
// 对 JSON 数据进行预处理
return transformJson(json);
});
通过以上排查和解决方案,您可以逐步定位并解决 Flink CDC 写入 Doris 时的问题。重点在于: - Schema 匹配:确保 Flink CDC 数据流与 Doris 表的 Schema 一致。 - 过滤 DDL 操作:避免 DDL 操作导致写入失败。 - 配置优化:调整 Flink Doris Connector 的参数,确保数据格式和写入逻辑正确。
如果问题仍然存在,建议提供更详细的日志信息以便进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。