跳到主要内容

常见导入问题

导入通用问题

报错”[DATA_QUALITY_ERROR] Encountered unqualified data“

问题描述:导入报数据质量错误。

解决方案

  • Stream Load 和 Insert Into 结果中会返回错误 URL,Broker Load 可通过 Show Load 命令查看对应错误 URL。
  • 通过浏览器或 curl 命令访问错误 URL 查看具体的数量质量错误原因。
  • 通过 strict_mode 和 max_filter_ratio 参数项来控制能容忍的错误率。

报错“[E-235] Failed to init rowset builder”

问题描述:-235 错误是因为导入频率过高,数据未能及时 compaction,超过版本限制。

解决方案

  • 增加每批次导入数据量,降低导入频率。
  • be.conf 中调大 max_tablet_version_num 参数, 建议不超过5000。

报错“[E-238] Too many segments in rowset”

问题描述:-238 错误是因为单个 rowset 下的 segment 数量超限。

常见原因

  • 建表时 bucket 数配置过小。
  • 数据出现倾斜,建议使用更均衡的分桶键。

报错”Transaction commit successfully, BUT data will be visible later“

问题描述:数据导入成功但暂时不可见。

原因:通常是由于系统资源压力导致事务 publish 延迟。

报错”Failed to commit kv txn [...] Transaction exceeds byte limit“

问题描述:存算分离模式下,单次导入涉及的 partition 和 tablet 过多, 超过事务大小的限制。

解决方案

  • 分批按 partition 导入数据, 减小单次导入涉及到的 partition 数量。
  • 优化表结构减少 partition 和 tablet 数量。

CSV 文件最后一列出现额外的 "\r"

问题描述:通常是 windows 换行符导致。

解决方案: 指定正确的换行符:-H "line_delimiter:\r\n"

CSV 带引号数据导入为 null

问题描述:带引号的 CSV 数据导入后值变为 null。

解决方案: 使用 trim_double_quotes 参数去除字段外层双引号。

Stream Load

导入慢的原因

  • CPU、IO、内存、网卡资源有瓶颈。
  • 客户端机器到 BE 机器网络慢, 通过客户端机器到 BE 机器的 Ping 时延可以做初步的判断。
  • Webserver 线程数瓶颈,单 BE 上 Stream Load 并发数太高(超过be.conf webserver_num_workers 配置)可能导致线程数据瓶颈。
  • Memtable Flush 线程数瓶颈,通过 BE metrics 查看 doris_be_flush_thread_pool_queue_size 看排队是否比较严重。可以适当调大 be.conf flush_thread_num_per_store 参数来解决。

特殊字符列名处理

列名中含有特殊字符时需要使用单引号配合反引号方式指定 columns 参数:

curl --location-trusted -u root:"" \
-H 'columns:`@coltime`,colint,colvar' \
-T a.csv \
-H "column_separator:," \
http://127.0.0.1:8030/api/db/loadtest/_stream_load

Routine Load

较严重的 Bug 修复

问题描述发生条件影响范围临时解决方案受影响版本修复版本修复 PR
当至少一个 Job 连接 Kafka 时发生超时,会影响其他 Job 的导入速度,导致全局 Routine Load 导入变慢存在至少一个 Job 连接 Kafka 时发生超时存算分离存算一体通过停止或手动暂停该 Job 来解决。<2.1.9 <3.0.52.1.9 3.0.5#47530
重启 FE Master 后,用户数据可能丢失Job 设置的 Offset 为 OFFSET_END,重启 FE存算分离将消费模式更改为 OFFSET_BEGINNING。3.0.2-3.0.43.0.5#46149
导入过程中产生大量小事务,导致 Compaction 无法及时完成,并持续报 -235 错误。Doris 消费速度过快,或 Kafka 数据流量呈小批量趋势存算分离存算一体暂停 Routine Load Job,并执行以下命令:ALTER ROUTINE LOAD FOR jobname FROM kafka ("property.enable.partition.eof" = "false");<2.1.8 <3.0.42.1.8 3.0.4#45528, #44949, #39975
Kafka 第三方库析构卡住,导致无法正常消费数据。Kafka 删除 Topic(可能不止此条件)存算分离存算一体重启所有 BE 节点。<2.1.8 <3.0.42.1.8 3.0.4#44913
Routine Load 调度卡住当 FE 向 Meta Service 中止事务时发生超时存算分离重启 FE 节点。<3.0.23.0.2#41267
Routine Load 重启问题重启 BE 节点存算分离存算一体手动恢复 Job。<2.1.7 <3.0.22.1.7 3.0.2#3727

默认配置优化

优化内容合入版本对应 PR
增加了 Routine Load 的超时时间2.1.7 3.0.3#42042, #40818
调整了 max_batch_interval 的默认值2.1.8 3.0.3#42491
移除了 max_batch_interval 的限制2.1.5 3.0.0#29071
调整了 max_batch_rows 和 max_batch_size 的默认值2.1.5 3.0.0#36632

可观测优化

优化内容合入版本对应 PR
增加了可观测性相关的 Metrics 指标3.0.5#48209, #48171, #48963

报错”failed to get latest offset“

问题描述:Routine Load 无法获取 Kafka 最新的 Offset。

常见原因

  • 一般都是到kafka的网络不通, ping或者telnet kafka的域名确认下
  • 三方库的bug导致的获取超时,错误为:java.util.concurrent.TimeoutException: Waited X seconds

报错”failed to get partition meta: Local:'Broker transport failure“

问题描述:Routine Load 无法获取 Kafka Topic 的 Partition Meta。

常见原因

  • 一般都是到kafka的网络不通, ping或者telnet kafka的域名确认下
  • 如果使用的是域名的方式,可以在/etc/hosts 配置域名映射

报错“Broker: Offset out of range”

问题描述:消费的 offset 在 kafka 中不存在,可能是因为该 offset 已经被 kafka 清理掉了。

解决方案:

  • 需要重新指定 offset 进行消费,例如可以指定 offset 为 OFFSET_BEGINNING。
  • 需要根据导入速度设置合理的 kafka log清理参数:log.retention.hours、log.retention.bytes等。