Routine Load 导入问题处理指南

Routine Load 导入问题处理指南

在这里插入图片描述

在使用 Apache Doris 的 Routine Load 时,你是否曾经被各种奇奇怪怪的问题卡住?今天就来分享一些最常见的 Routine Load 问题,并提供相应的解决方案,让你快速应对,高效解决!
在这里插入图片描述


一、服务端参数配置

在 Doris 2.1.4 之前,你需要手动配置一些服务端参数:

FE 参数

  • max_routine_load_task_num_per_be=256
  • max_routine_load_task_concurrent_num=256

BE 参数

  • routine_load_consumer_pool_size=256

在 2.1.4 之后,这些参数可以不用配置。


二、任务参数配置

常见参数

  • desired_concurrent_number:如果配置了 max_routine_load_task_concurrent_num,这个参数可以不配置
  • max_batch_interval:最大批次间隔时间
  • max_batch_size:最大批次数据量
  • max_batch_rows:最大批次行数

注意⚠️:任意三者达到任意一个条件,则 task 将结束。

如果对数据可见性时间没有固定要求,可以将 max_batch_interval 设置举值大些,如 30s 或 60s。
max_batch_sizemax_batch_rows 设置大一点,如:

  • max_batch_rows=200,000,000
  • max_batch_size=10G

三、通过 SSL Kafka 集群进行导入

如果你需要访问带 SSL 认证的 Kafka 集群,完整的过程如下:

1. 上传认证文件

通过 CREATE FILE 命令上传认证文件,并设置 catalog 为 kafka

CREATE FILE "ca.pem" PROPERTIES("url" = "https://example_url/kafka-key/ca.pem", "catalog" = "kafka");
CREATE FILE "client.key" PROPERTIES("url" = "https://example_url/kafka-key/client.key", "catalog" = "kafka");
CREATE FILE "client.pem" PROPERTIES("url" = "https://example_url/kafka-key/client.pem", "catalog" = "kafka");

2. 创建任务

设置与 Kafka 相关的认证参数:

CREATE ROUTINE LOAD db1.job1 on tbl1
PROPERTIES
("desired_concurrent_number"="1"
)
FROM KAFKA
("kafka_broker_list"= "broker1:9091,broker2:9091","kafka_topic" = "my_topic","property.security.protocol" = "ssl","property.ssl.ca.location" = "FILE:ca.pem","property.ssl.certificate.location" = "FILE:client.pem","property.ssl.key.location" = "FILE:client.key","property.ssl.key.password" = "abcdefg"
);

更多 Kafka 参数,可参阅 librdkafka 配置文档。


四、常见问题及解决方案

1. 默认参数过低:max_filter_ratiomax_error_number

  • 默认值:
    • max_filter_ratio = 1
    • max_error_number = 0

任意一项超出则抛出异常。结合自己对于数据质量的要求,做出适当调整。

2. Failed to get latest offset

有两种可能:

(1) Kafka 网络不通
//报错案例
failed to get partition meta: Local:'Broker transport failure
  1. 一般都是到kafka的网络不通,ping或者telnet kafka的域名确认下。
  2. 如果使用的是域名的方式,需要在配置/etc/hosts 域名映射
(2) 超时问题
//报错案例
java.util.concurrent.TimeoutException: Waited X seconds

目前有一个已知的三分库bug,会导致和kafka通信的consumer析构的时候卡住,导致持有锁,进而这个be所有的consumer都无法拿到锁导致无法消费和获取元数据,在fe端的表现可能为超时,下面这个栈

注意⚠️:这里只是可能,并不是一定是触发了这个bug

如何判断是不是触发了这个bug

  1. be没有获取元数据错误的日志,即搜不到下面这两个日志
  • failed to get partition meta
  • failed to get latest offset for partition
  1. 打一个pastack,搜routine_load/clean_idle_consumer线程,卡在consumer析构的栈上

可能避免出现bug的方法(不完全保证)

  1. 删除topic之前先pause/stop routine load
  2. 设置be参数routine_load_consumer_pool_size = 0

出现了该如何解决

重启be即可

3. 报错Bad message format

原因:Kafka 域名解析失败

  • 修改 /etc/hosts,配置正确的域名映射。

4. 报错TOO_MANY_TASKS

  • 首先检查配置,配置参考前面内容。
  • 如果是 2.0.9 和 2.1.3 之前的版本,可以升级到更新版本,2.0.9和2.1.3之前都存在已知的bug导致TOO_MANY_TASKS的问题。紧急情况下可以重启BE尝试解决。

5. 创建任务时有字段带特殊字符

比如某些列名上有些特殊字符,加上反引号(``)即可

参考案例:

6. 升级后Routine load报语法错误

注意⚠️:不是常见问题,遇到了,按照下面的方式解决就行了


这是因为升级后报错关键词冲突了,比如desc group cross key workload这些关键词。原来创建的时候,加了反引号可以避免这个问题。

解决方案

这里需要回退版本,在老版本彻底删除routine load job, 具体删除步骤(确保create routine load的editlog被彻底删除):

  1. stop routine load
  2. 触发checkpoint之后算彻底删除,这里可以通过缩短label_keep_max_second配置来加快checkpoint的频率。

7.routineload导入的数据时间点比kafka的小

如果routine load 使用now() 作为字段值的时候,数据时间有时候比实际入库的晚,有时候更早,这是符合预期的。

这是因为routineload的写入时间会在规划的时候确定,一个task的所有数据的时间都会用这个写入时间。

8. 其他情况

其他正常情况下,导入报错会返回一个Error URL,可点击链接获取具体报错原因。

注意⚠️:有些版本(如:2.1.3/2.1.4/2.1.5)没有报错URL,可以在be.confstorage_root_path配置的第一个目录下的be/storage/error_log找一下。2.1.6 修复了这个问题


学习这些实用技巧,直面 Routine Load 问题,你也可以轻松解决。下次看到各种奇奇怪怪的报错,就用这些方法和提示试试吧!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/67887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】技术场景 6、Java 生产环境 bug 排查

生产环境 bug 排查思路 分析日志:首先通过分析日志查看是否存在错误信息,利用之前讲过的 elk 及查看日志的命令缩小查找错误范围,方便定位问题。远程 debug 适用环境:一般公司正式生产环境不允许远程 debug,多在测试环…

牛客 《反转链表》 链表 题解

前言 太久没有练习C和Java,基本忘完了…还有数据结构也不太熟悉了。借此机会回顾一下相关的知识点,也为之后做准备吧。 题目内容 思路 要求时间复杂度为O(n),那么只能遍历一次。反转的话,只需要将链表箭头指向换个方向就行。遍…

容器技术全面攻略:Docker的硬核玩法

文章背景 想象一下,一个项目终于要上线了,结果因为环境配置不一致,测试服务器一切正常,生产环境却宕机了。这是开发者噩梦的开始,也是Docker救世主角色的登场!Docker的出现颠覆了传统环境配置的方式&#…

RabbitMQ高级篇

目录 确保发送者的可靠 为什么需要确保发送者的可靠性 RabbitMQ 的发送者重连机制配置 springAMQP实现发送者确认 MQ的可靠性 为什么需要实现MQ的可靠性? 数据持久化 Lazy Queue 核心思想 总结RabbitMQ 如何保证消息的可靠性 持久化 Lazy Queue 消息…

微信小程序用的SSL证书有什么要求吗?

微信小程序主要建立在手机端使用,然而手机又涉及到各种系统及版本,所以对SSL证书也有要求,如果要小程序可以安全有效的访问需要满足以下要求: 1、原厂SSL证书(原厂封)。 2、DV单域名或者DV通配符。 3、兼…

OpenCV计算机视觉 07 图像的模块匹配

在做目标检测、图像识别时,我们经常用到模板匹配,以确定模板在输入图像中的可能位置 API函数 cv2.matchTemplate(image, templ, method, resultNone, maskNone) 参数含义: image:待搜索图像 templ:模板图像 method&…

uniapp开发u-icon图标不显示问题

uniapp开发图标用u-icon不显示,换成uv-icon就可以了 插件市场从这里下载:uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端,灵活导入,利剑出击 - DCloud 插件市场 组件库看这个:介绍 | 我的资料管理-uv-ui 是全面兼…

ELK的搭建

ELK elk:elasticsearch logstatsh kibana统一日志收集系统 elasticsearch:分布式的全文索引引擎点非关系型数据库,存储所有的日志信息,主和从,最少需要2台 logstatsh:动态的从各种指定的数据源,获取数据…

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…

【项目】修改远程仓库地址、报错jdk

一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录&#xff0c;执行以下命令来修改远程仓库的 URL&#xff0c;将其指向你自己的新仓库&#xff1a; cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>补充&#xff1a; 错误分析&#xff1a; wa…

实训云上搭建集群

文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…

vue3+ts+element-plus 输入框el-input设置背景颜色

普通情况&#xff1a; 组件内容&#xff1a; <el-input v-model"applyBasicInfo.outerApplyId"/> 样式设置&#xff1a; ::v-deep .el-input__wrapper {background-color: pink; }// 也可以这样设置 ::v-deep(.el-input__wrapper) {background-color: pink…

直线模组中导轨和滑块松动如何处理?

直线模组抖动是直线模组在日常运用中比较常见的一种异常行为&#xff0c;直线模组的抖动对精度和寿命都会产生严重影响。直线模组出现抖动通常是由于导轨和滑块之间的摩擦、松动或不平衡所引起的。那么&#xff0c;针对直线模组中导轨和滑块存在的松动问题&#xff0c;可以采取…

Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印 Pyside6版

图 这图是第2版, 现在发布原型版 代码: order_system_pyside6.py from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,QHBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox,QTableWidget, QTableWidgetItem, QComboBox, QFrame,QH…

element upload上传图片,上传完成隐藏组件或者禁用上传

背景&#xff1a; 在项目开发&#xff0c;需要上传图片&#xff0c;一张或者多张。当上传1张图片时&#xff0c;upload组件有一张图片时&#xff0c;组件自带的disabletrue设置为true禁用上传&#xff0c;就不会触发上传接口了&#xff0c;但是还是可以点开图片进行选择&#x…

【2024年华为OD机试】 (A卷,100分)- 二元组个数(Java JS PythonC/C++)

一、问题描述 以下是题目描述的 Markdown 格式&#xff1a; 题目描述 给定两个数组 a 和 b&#xff0c;若 a[i] b[j]&#xff0c;则称 [i, j] 为一个二元组。求在给定的两个数组中&#xff0c;二元组的个数。 输入描述 第一行输入 m&#xff0c;表示第一个数组的长度。第二…

Homebrew 【MAC安装软件利器】

1、brew介绍 Homebrew游来: Homebrew 的诞生源于一个年轻程序员的不满和创新。2009 年&#xff0c;Max Howell 当时是一名在苹果公司工作的程序员。他觉得在 Mac 上安装和管理开源软件特别麻烦&#xff0c;常常需要手动下载源代码、解决依赖关系、编译安装&#xff0c;过程繁琐…

AOP实现操作日志记录

文章目录 1.common-log4j2-starter1.目录2.pom.xml 引入依赖3.LogAspect.java4.Log4j2AutoConfiguration.java Log4j2自动配置类条件注入切面类 2.common-log4j2-starter-demo 测试1.目录2.application.yml 启用日志切面3.TraceController.java4.结果 1.common-log4j2-starter …

JavaEE之线程池

前面我们了解了多个任务可以通过创建多个线程去处理&#xff0c;达到节约时间的效果&#xff0c;但是每一次的线程创建和销毁也是会消耗计算机资源的&#xff0c;那么我们是否可以将线程进阶一下&#xff0c;让消耗计算机的资源尽可能缩小呢&#xff1f;线程池可以达到此效果&a…

YOLOv11改进,YOLOv11添加HAttention注意机制用于图像修复的混合注意力转换器,CVPR2023,超分辨率重建

摘要 基于Transformer的方法在低层视觉任务中表现出色,例如图像超分辨率。然而,作者通过归因分析发现,这些网络只能利用有限的空间范围的输入信息。这意味着现有网络尚未充分发挥Transformer的潜力。为了激活更多的输入像素以获得更好的重建效果,作者提出了一种新型的混合…