导入问题 too many tablet version解决方法
背景:
实时导入过程中经常遇到导入失败报错too many tablet version的情况,此原因是因为StarRocks内部,表级别version数量有1000的限制,通常见于数据写入频次过高,数据合并来不及从而堆积大量的verison。本文主要介绍此种情况下如何恢复导入任务。
现象:
导入失败时检索be日志
grep 'too many tablet versions' /data/xxx/starrocks/be/log/be.WARNING
会发现如下错误
恢复步骤:
在日志里搜索所示字样
grep 'Fail to init delta writer' /data/xxx/starrocks/be/log/be.WARNING
检索结果会有tablet=xxx的信息,
这里以tablet 716097为例
连接starrocks然后查询tablet所属表信息:
show tablet 716097
如下所示,DbName和TableName分别表示对应database和所属表
此时需要调整写入该表的任务间隔、并发、单次写入量:核心在于通过增大单次写入数据量,减少任务提交次数以及写入并发。
以routineload为例:
参考文档:https://docs.starrocks.com/zh-cn/main/loading/RoutineLoad
-
max_batch_interval :每个子任务最大执行时间,单位是「秒」。范围为 5 到 60。默认为10。 1.15版本后 : 该参数是子任务的调度时间,即任务多久执行一次,任务的消费数据时间为fe.conf中的routine_load_task_consume_second,默认为3s, 任务的执行超时时间为fe.conf中的routine_load_task_timeout_second,默认为15s。
-
max_batch_rows :每个子任务最多读取的行数。必须大于等于200000。默认是200000。 1.15版本后 : 该参数只用于定义错误检测窗口范围,窗口的范围是10 * max-batch-rows 。
-
max_batch_size :每个子任务最多读取的字节数。单位是「字节」,范围是 100MB 到 1GB。默认是 100MB。 1.15版本后 : 废弃该参数,任务消费数据的时间为fe.conf中的routine_load_task_consume_second,默认为3s。
如果配置了上述单个参数,可直接修改相应参数为较大值,如果配置了上述多个参数,starrocks内部触发任一参数阈值即会提交任务,所以根据实际导入数据调整相应多个参数。
datax相应参数:
参考文档:https://docs.starrocks.com/zh-cn/main/loading/DataX-starrocks-writer
-
maxBatchRows
- 描述:单次StreamLoad导入的最大行数
-
必选:否
-
默认值:500000 (50W)
-
maxBatchSize
- 描述:单次StreamLoad导入的最大字节数。
-
必选:否
-
默认值:104857600 (100M)
-
flushInterval
- 描述:上一次StreamLoad结束至下一次开始的时间间隔(单位:ms)。
-
必选:否
-
默认值:300000 (ms)
flink相应参数:
参考文档:https://docs.starrocks.com/zh-cn/main/loading/Flink-connector-starrocks
sink.buffer-flush.max-bytes | NO | 94371840(90M) | String | the max batching size of the serialized data, range: [64MB, 10GB]. |
---|---|---|---|---|
sink.buffer-flush.max-rows | NO | 500000 | String | the max batching rows, range: [64,000, 5000,000]. |
sink.buffer-flush.interval-ms | NO | 300000 | String | the flushing time interval, range: [1000ms, 3600000ms]. |