如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?

今天来聊聊 Doris 数据导入那些事儿。你是不是在数据导入的时候遇到各种状况,让人头疼不已?别担心,这篇文章给你答案!
在 Doris 的版本里,< 2.0.3 的时候,数据迁移存在一些已知的问题,比如可能会丢数据,还可能触发坏副本。不过,2.0.3 版本之后,大部分丢数据的问题被修复了。但还是有些小状况,像 BE 导入数据失败、BE publish 阶段慢、BE 突然挂掉等问题。
低于2.0.3版本的用户还是优先推荐升级到当前版本的最新小版本
一、副本失败的线索在哪?
当数据导入报错,先看日志中的关键信息:
-
成功的关键数字:
"xx replicas final succ",这个数字得大于等于多数派(副本数为 n,多数派就是 [n/2] + 1),导入才算成功哦。 -
写失败的原因:
"xx replicas write data failed",这里面学问可大了。可能是 BE 挂了(backendAlive = false或者backend = null),也可能是副本被标记为 bad(isBad = true,原因可能是磁盘离线等),还有可能是 BE 写入或者 publish 阶段掉链子了。比如说 mow 表按 version 连续 publish,如果缺前面的 version,就会暂停 publish。 -
版本缺失的情况:
"xx replicas write data succ but miss previous",本事务写成功了,但副本前面少了 version,这种情况副本的last failed version > 0。
要是副本失败了,怎么找原因呢?对每个副本,先找到它首次出问题的事务。如果是 "Failed to commit" 对应的事务,那就简单了;要是 "write data succ but miss previous" 的情况,就得通过一些步骤找到首次失败的事务,比如根据提示中的 version 信息,在其他副本的日志里搜索,找到对应的事务 id。拿到事务 id 后,再去查副本在这个事务上失败的原因,可能是 publish 失败,也可能是其他情况。
二、常见问题及处理方法
-
多副本问题:有时候多副本情况,1 副本
"replicas final succ",其他副本"write data succ but miss previous"。这可能是因为"publish one succ",失败的副本可能是 BE publish 慢了,或者当时在 publish 的时候挂了。这种情况,如果不解决,后续新的导入可能会因为失败副本太多而失败。 -
BE 存活但导入失败:如果出现
"xx replicas write data failed",BE 是存活的,副本也没被标记为 bad,那就可能是导入本身出问题了,得从日志里面具体找导入的问题。在主 FE 上用报错的事务 id 和beginTransaction查看,能找到 coordinator BE 的 IP,再去这个 BE 上用事务 id 查看日志,如果导入失败,会有报错信息。 -
所有副本都缺 rowset:这种情况在不同版本有不同表现。2.1 版本 BE 丢失 rowset 过 3 分钟后,FE 会把 BE 的
last failed version改成 > 0,但 2.0 版本不一定。判断方法是通过一些命令查看 partition 的 visible version 和 BE 端各个副本的 version,如果所有副本的 compact status 都缺少 partition 的 visible version,那就是 BE 丢数据了。可能是用户回滚操作、backup/restore 操作有问题,或者 BE 配置问题导致的。
副本缺失的问题,可以参考这个文章:Doris查询报错-230?别慌,教你几招秒解!
三、BE publish 慢或堆积问题
如果 FE publish task 任务下发超过 5 分钟,事务还没成功,可能会触发 "publish one succ",第一个完成的副本会结束事务,其他副本就被标记为失败了。判断 publish 堆积的方法,可以搜索 BE 日志,看看 queue size,如果大于 50,就说明任务堆积了。2.0.5 版本之后日志有变化,也可以通过其他方式判断,比如搜 "publish version successfully on tablet" 或者 "finish to publish version on" 的日志,看 cost 时间来判断 publish 是不是慢了。要是 publish 慢了的话,可以参考下面的解决办法
- 2.1.2和2.1.3版本有已知的问题,修复pr连接,可以升级到2.1的最新版本解决。
- 写edit log耗时长导致的Publish 慢,可以在日志里面搜一下
grep checkAndLogWriteLockDuration fe.log
一般情况下是fe磁盘忙,可能是高频导入导致写很多edit log, 或者跟be混布be写压力大等等所致。如果是高频导入,直接降导入频率就可以了。如果fe是跟其他进程混布,其他进程写磁盘压力大的,则把混布分开(不推荐FE和BE混部)。
- decommision或者添加索引时发现有事务卡住, 可以通过fe web页面或日志找到卡住事物id,手动abort事务
//abort参考命令
curl -X PUT --location-trusted -u user:passwd -H "txn_id:18037" -H "txn_operation:abort" http://fe_host:http_port/api/{db}/{table}/_stream_load_2pc
- 1.2.7版本commit到visible需要较长时间,各个be的日志搜索:
grep PUBLISH be.INFO |grep queue |tail -n 20,如果queue_size比较大,说明Publish卡住,可以通过打一个be的pstack进一步石锤,重启be可解决。修复pr链接,该pr已fix。另外1.2的版本推荐升级!

四、BE 挂掉的麻烦事
如果短时间内来回挂两台以上的 BE,或者先挂一台再重启又挂另一台,就容易出问题。比如 BE A 挂掉重启后,副本缺失 version,如果马上挂掉 BE B,可能会因为可用副本不足导致导入失败。这时候得等 A 上的副本补上 version,或者新增副本成功后,才能恢复正常写入。
这主要是因为在挂掉A之时,A 上的副本是缺失version。 在把A 重启之后,A 上的缺失的副本需要把version都先补上,这些副本才能参与导入成功多数派计数。而如果此时又把另一台B 挂掉,那么B上的副本需要迁移到其他机器上。所以,此时,既需要把A 缺失的version 给补上,另外又需要找另一台BE C clone B上的副本。 如果B上的tablet 很多,或者数据量很大(show backends 查看TabletNum 和 DataCapacity),那么这个修补repair可能就很久。从而在此期间三副本中因两个副本不可用(A上副本缺version, B上的副本则因为B挂了),从而导入都失败。
五、总结
数据导入问题定位起来并不容易,但只要按照这些方法去排查,就能找到问题所在,可以自己先尝试解决
一波。如果搞不定了,可以联系社区的同学帮忙解决,毕竟有Doris社区来兜底!
相关文章:
如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?
今天来聊聊 Doris 数据导入那些事儿。你是不是在数据导入的时候遇到各种状况,让人头疼不已?别担心,这篇文章给你答案! 在 Doris 的版本里,< 2.0.3 的时候,数据迁移存在一些已知的问题,比如可…...
回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 数据准备&#x…...
HCIA-Access V2.5_7_3_XG(S)原理_关键技术
为什么需要测距 因为上行链路只有一根纤,而且每一个ONU到OLT的距离是不一样的,虽然上行通过TDMA技术,让每一个ONU在不同的时间段发送数据,但是仍然有可能在同一时刻到达分光器,产生数据冲突。 有测距的信元传输 所以为了避免碰撞冲突,通过ONU在注册的时候就会启动测距…...
leetcode hot 100 不同路径
62. 不同路径 已解答 中等 相关标签 相关企业 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )…...
智慧工地解决方案 1
建设背景与挑战 工地施工现场环境复杂,人员管理难度大,多工种交叉作业导致管理混乱,事故频发。传统管理方式难以实现科学、有效、集中式的管理,特别是在环境复杂、地点分散的情况下,监管困难,取证复杂。施…...
LeetCode -Hot100 - 53. 最大子数组和
前言 本专栏主要通过“LeetCode 热题100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c/java。如果同样正在练习LeetCode 热题100的朋友欢迎关注或订阅本专栏。有疑问欢迎留言交流~ 题目描述 题目链接 示例 1: 输入:nums [-2,1…...
php 多进程那点事,用 swoole 如何解决呢 ?
在 PHP 中,多进程的处理通常会遇到一些挑战,比如资源共享、进程间通信、性能优化等。Swoole 是一个高性能的协程和多进程框架,旨在为 PHP 提供异步、并发、协程等功能,解决了传统 PHP 环境中的多进程管理问题。通过使用 Swoole&am…...
探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比
文章目录 个人感受一、AI绘图流程1.1 Midjourney(1)环境配置(2)生成prompt(3)完善prompt(4)开始绘图(5)后处理 1.2 ChatGPT不合理的出图结果解决方案 二、主题…...
【竞技宝】CS2:HLTV 2024 TOP11-w0nderful
北京时间2025年1月4日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP11为NAVI战队的w0nderful。 选手简介 w0nderful是一名来自于乌克兰的CS选手,现年20岁,目前在比赛中司职狙击手。w0nderful于2020年开启了自己的…...
Lua迭代器如何使用?
在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 12.1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要…...
qt中如何判断字符串是否为数字,整数,浮点数?
在 Qt 中,可以使用多种方法来判断字符串是否为数字、整数或浮点数。Qt 提供了一些方便的字符串和数值处理函数,可以帮助你实现这些判断。以下是几种常见的方法: 1. 使用 QRegularExpression Qt 提供了 QRegularExpression 类,可…...
Oracle sql developer and Toad for Oracle set start DBMS output
Oracle sql developer Toad for Oracle...
【踩坑】SparkSQL union/unionAll 函数的去重问题
【踩坑】SparkSQL union/unionAll 函数的去重问题 测试数据 case class Employee(first_name:String)val employeeDF1 spark.createDataset(Seq( Employee("Mary"), Employee("Mandy"),Employee("Kurt") )) val employeeDF2 spark.createDat…...
域上的多项式环,整除,相通,互质
例1.已知 (R,,x)为域,请选出正确的说法:(A)(R,,x)也是整区; ABCD (B)R中无零因子; C)R在x运算上满足第一、二、三指数律; (D)R只有平凡理想; (E)R只有平凡子环。 域的特征: 域中,非0元素的加法周期 思考、在模7整数环R,中,…...
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Julia语言的学习路线
Julia语言的学习路线 引言 在现代编程世界中,编程语言如同工具,各自具有独特的特点与优势。Julia语言自2012年发布以来,以其优越的性能和优雅的语法逐渐吸引了越来越多的数据科学家、工程师和研究人员的关注。在本篇文章中,我们…...
对计网大题的一些指正(中间介绍一下CDM的原理和应用)
目录 前言: (1)五层原理体系结构每层功能: 下面是文档的答案: 我在之前的博客里面有介绍过五层原理体系结构, 按理来说,第五层应该是应用层才对,而会话层的功能应该被放到应用层…...
UGUI 优化DrawCall操作记录(基于Unity2021.3.18)
UGUI中相同材质相同Shader相同贴图的UI元素可以合并DrawCall。 1.使用图集 Unity性能优化---使用SpriteAtlas创建图集进行批次优化_unity2021.3.33 spriteatlas优化-CSDN博客 2.Canvas的子物体在场景树中的索引位置和不同图集不影响UI合批且UI网格没有重叠,如下图…...
前端实现大文件上传(文件分片、文件hash、并发上传、断点续传、进度监控和错误处理,含nodejs)
大文件分片上传是前端一种常见的技术,用于提高大文件上传的效率和可靠性。主要原理和步骤如下 文件分片 确定分片大小:确定合适的分片大小。通常分片大小在 1MB 到 5MB 之间使用 Blob.slice 方法:将文件分割成多个分片。每个分片可以使用 Bl…...
es单机安装脚本自动化
背景 所有部署工作都可以由机器本身完成,并不需要人的参与,人唯一需要做的是把变量提取出来,进行赋值喂给脚本,然后脚本自己执行即可。下边是es单机安装的过程和脚本,由人变到脚本执行,方便理解。 步骤 1、解压es软件tar包。 2、cd至解压以后得config目录下,vim修改…...
Tetrazine-NHBoc,cas:1380500-93-5,四嗪-氨基叔丁酯的结构特点
Tetrazine-NHBoc(四嗪-氨基叔丁酯)是一种结合了四嗪基团和N-叔丁氧羰基(NHBoc)保护基的有机化合物,以下是对其的详细介绍:一、基本信息中文名称:四嗪-氨基叔丁酯英文名称:Tetrazine-…...
3步革新Windows任务栏:TranslucentTB打造个性化桌面体验
3步革新Windows任务栏:TranslucentTB打造个性化桌面体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在视觉主导的数字时代…...
Windows环境下coturn服务器部署与配置实战
1. Windows下coturn服务器部署全攻略 最近在做一个WebRTC项目时,发现很多开发者卡在了TURN服务器搭建这个环节。特别是需要在Windows环境下部署coturn的场景,网上的资料要么太零散,要么直接照搬Linux的教程。今天我就把自己在Windows 10上通过…...
从零部署到实战标注:SUSTechPOINTS 3D点云标注平台全流程指南
1. 为什么选择SUSTechPOINTS进行3D点云标注 在自动驾驶研发过程中,3D点云标注是个绕不开的苦差事。我最早用过不少商业标注工具,不是价格贵得离谱,就是功能残缺不全。直到去年团队接手一个校企合作项目,才发现南方科技大学开源的这…...
3个核心优势让研究者实现智能OCR全场景覆盖:Pix2Text开源替代方案详解
3个核心优势让研究者实现智能OCR全场景覆盖:Pix2Text开源替代方案详解 【免费下载链接】Pix2Text Pix In, Latex & Text Out. Recognize Chinese, English Texts, and Math Formulas from Images. 项目地址: https://gitcode.com/gh_mirrors/pi/Pix2Text …...
Realistic Vision V5.1 提示词工程入门:C语言基础思维在Prompt编写中的应用
Realistic Vision V5.1 提示词工程入门:C语言基础思维在Prompt编写中的应用 如果你有C语言的编程经验,现在想玩转AI图像生成,特别是像Realistic Vision V5.1这样的写实风格模型,那这篇文章就是为你准备的。很多人觉得写提示词&am…...
从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略
从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域,PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡,PCIe的身影无处不在。然而,看似相同的…...
iarduino_KB矩阵键盘库:硬件感知型Arduino按键驱动方案
1. 项目概述iarduino_KB是由俄罗斯嵌入式开发团队 iArduino.ru 面向 Arduino IDE 推出的专用矩阵键盘驱动库。该库并非通用型扫描抽象层,而是针对其自研四款物理形态与电气特性高度定制化的柔性/机械式矩阵键盘模块进行深度适配的固件级解决方案。其核心价值在于将底…...
GLM-OCR模型Node.js环境配置与API服务搭建全指南
GLM-OCR模型Node.js环境配置与API服务搭建全指南 你是不是也遇到过这样的场景?手头有一堆图片需要提取文字,比如扫描的文档、截图或者手机拍的照片。自己手动录入?效率太低。用现成的在线OCR工具?又担心数据安全和调用限制。特别…...
BabyOS:MCU裸机开发的轻量级框架解析
1. BabyOS:专为MCU裸机开发设计的轻量级框架 在嵌入式开发领域,重复造轮子一直是困扰工程师的痛点。每次新项目启动,我们总需要重新调试那些基础功能模块——从串口通信到Flash操作,从定时器管理到协议栈实现。BabyOS的出现&#…...
