flink进行etl向doris 写入数据时,报错如下
,但是检查之后发现be运行一直正常,上次启动时间已经是8月31号的了?这个会是什么原因?代码结构相同的其余任务就没有发现这个问题?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的报错信息以及知识库中的相关资料,以下是可能导致问题的原因及解决方案:
在Flink向Doris写入数据时,出现异常但BE(Backend)运行正常且上次启动时间较早(8月31日),可能的原因包括以下几种:
报错信息中提到的current running txns on db 10006 is 100, larger than limit 100
表明当前数据库的事务数超过了Doris的限制。
- 原因:Doris对每个数据库的并发事务数有限制,默认为100。如果事务未及时提交或回滚,可能会导致事务堆积。 - 检查点: - 检查是否有大量未完成的事务。 - 确认Flink任务是否频繁开启新事务而未正确关闭。
Flink写入Doris时,如果数据未按照主键进行Shuffle,可能会导致写入失败或性能下降。
- 原因:相同主键的数据分布在不同的Flink Task上,无法保证写入顺序。 - 检查点: - 确认Flink SQL逻辑中是否按照Doris表的主键进行了Shuffle。
如果Flink导入过程中存在脏数据(如格式错误、字段缺失等),可能会导致写入失败。
- 原因:Doris对数据格式有严格要求,脏数据会导致写入中断。 - 检查点: - 检查Flink任务的日志,确认是否存在脏数据。 - 配置Flink跳过脏数据的参数(如max-error-rows
)。
报错信息中提到的TApplicationException: get_next failed: out of sequence response
可能是由于Thrift框架的并发Bug导致的。
- 原因:Flink Connector与Doris之间的通信可能存在兼容性问题。 - 检查点: - 确认使用的Flink Connector版本是否为最新。 - 确认Flink版本与Doris版本是否兼容。
虽然BE节点显示运行正常,但可能存在隐性问题(如内存不足、磁盘空间不足等)。
- 原因:BE节点资源不足可能导致写入失败。 - 检查点: - 检查BE节点的磁盘空间和内存使用情况。 - 查看BE节点日志,确认是否存在异常。
SHOW PROC '/transactions/{db_id}';
KILL TRANSACTION {transaction_id};
SET global max_running_txn_num_per_db = 200;
CREATE TABLE doris_sink (
id BIGINT,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'doris',
'fenodes' = 'doris_host:8030',
'table.identifier' = 'db.table',
'sink.enable-2pc' = 'true'
);
sink.max-error-rows=1000
df -h
free -m
tail -f be.INFO
通过以上步骤,您可以逐步排查并解决Flink向Doris写入数据时的异常问题。如果问题仍未解决,请提供更详细的报错日志以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。