Druid从Kafka导入数据异常及覆盖数据时的三类问题
Druid数据覆盖操作中的三类问题及排查方案
问题1:数据源未创建,任务日志无报错
执行删除旧数据源、创建同名新数据源的流程后,请求返回200,但Druid数据源列表中看不到目标数据源,对应的supervisor和任务处于运行状态,且任务日志无错误信息。
排查方向:
- 检查Druid元数据存储(如MySQL/PostgreSQL),确认该数据源的元数据记录是否存在,可能存在元数据同步延迟
- 重启Coordinator节点,强制刷新数据源元数据缓存
- 核对创建数据源的JSON配置,确保
dataSource字段与目标名称完全一致,无大小写或拼写错误 - 查看Coordinator节点日志,排查是否存在元数据写入的隐性错误
问题2:任务抛出timestamp空指针异常
任务运行时抛出空指针异常,错误日志如下:
2024-03-18T11:14:54,602 ERROR [task-runner-0-priority-0] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Encountered exception while running task. java.lang.NullPointerException: timestamp
排查方向:
- 检查Kafka消息中的时间字段,确认是否存在空值或格式不符合Druid配置的时间格式
- 验证 ingestion spec 中的
timestampSpec配置:确保column字段指向消息中实际存在的时间字段,且format参数与时间字段的格式匹配(如iso、millis等) - 若消息中无有效时间字段,需配置
missingValue策略(如使用当前系统时间),避免因时间字段缺失触发空指针 - 检查Druid版本,部分旧版本存在时间字段处理的bug,可尝试升级至稳定版本
问题3:偏移量超出范围(OffsetOutOfRangeException)
任务运行时出现偏移量越界警告,错误日志如下:
2024-03-18T08:33:02,556 WARN [task-runner-0-priority-0] org.apache.druid.indexing.kafka.IncrementalPublishingKafkaIndexTaskRunner - OffsetOutOfRangeException with message [Fetch position FetchPosition{offset=560, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[192.168.144.68:9092 (id: 0 rack: null)], epoch=absent}} is out of range for partition test_ingestion-0] 2024-03-18T08:33:02,557 WARN [task-runner-0-priority-0] org.apache.druid.indexing.kafka.IncrementalPublishingKafkaIndexTaskRunner - Retrying in 30000ms
排查方向:
- 通过
kafka-consumer-groups.sh脚本或Kafka UI工具,查看目标主题test_ingestion-0的当前可用偏移量范围 - 若旧supervisor记录的偏移量已被Kafka清理(超过日志保留时间),需重置supervisor的起始偏移量:创建supervisor时指定
initialOffset为earliest或latest,或通过REST API手动重置偏移量 - 确认Kafka主题的分区配置是否变更(如分区数调整),导致旧偏移量失效
- 核对supervisor配置中的
topic字段,确保与实际Kafka主题名称一致,无拼写错误
内容的提问来源于stack exchange,提问作者PSM
相关产品推荐
相关产品推荐

