【已解决】查询routine load消费下来的doris表报错missed_versions is empty,如何处理?

Viewed 45

麻烦问一下,我们有张表数据是通过routine load任务实时消费kafka,查询这张表时有时会报如下错误,这个是bug吗?
errCode = 2, detailMessage = (ali-doris-prod-02)[CANCELLED]missed_versions is empty, spec_version 196888, max_version 199317, tablet_id 12661003

问题:
1、missed_versions是指什么版本?spec_version又是指什么版本?
2、doris此时能查询的最大版本的数据是对应的max_version还是spec_version?
3、如何能彻底避免这个问题?

1 Answers

可以按照这个 FAQ 处理下:

解決方案:调大be.conf的tablet_rowset_stale_ sweep_time_sec参数,并重启BE节点
参数说明:这个参数主要是加大了合并版本的清理时间,尽可能避免刚好查询时需要的版本被合并清理了(写
入过于频繁场景容易出现),举个例子:有张表table_a里未合并清理的版本号是1-9,那么这个时候去执行
select * from table_a 它会去查询最新的version 9的数据,如果这段时间table_a同时有写入,版本变成了1-10
并且触发compaction及满足tablet_rowset_stale_sweep_time_sec要去清理合并过的版本,变成了一个最新的查询版本1-10,那么这个时候version9 (1-9) 就无法查询了,则会出现 select * from table_a 需要的version 9
不存在miss从而报missed versions is empty
BE参数说明可以查阅BE配置项:
https://doris.apache.org/zh-CN/docs/admin-manual/config/be-config