You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Druid markUnused接口延迟标记Segment为Unused的原因及解决方法

Druid Segment标记为Unused延迟问题排查与解决

问题背景

我有一个名为test的数据源,包含一个Segment,想要删除该Segment。根据文档,删除Segment需先将其标记为Unused,再执行Kill操作。我向以下端点发送POST请求,请求体中携带目标Segment ID:

POST http://<ip>:<coordinator_port>/druid/coordinator/v1/datasources/test/markUnused

请求体:

{
     "segmentIds":[
    "test_2024-02-01T00:00:00.000Z_2024-03-01T00:00:00.000Z_2024-01-30T06:16:15.950Z_6" ]
}

首次调用返回结果:

{
    "numChangedSegments": 0
}

几小时后再次发送相同请求,返回结果:

{
    "numChangedSegments": 1
}

相关信息:

  • Druid版本:26.0.0
  • 数据源摄入类型:Kafka

延迟原因分析

  • Segment处于活跃写入状态:由于数据源是Kafka实时摄入类型,目标Segment可能仍被Kafka索引任务持续写入数据。Druid不允许将正在写入的Segment标记为Unused,必须等Segment关闭(转为只读状态,不再接收新数据)后才能操作。
  • Coordinator元数据刷新周期过长:Coordinator会定期扫描并刷新Segment的状态元数据,默认周期可能长达数小时,只有当Coordinator检测到Segment已关闭后,markUnused请求才能生效。

实现立即标记Unused的方法

方法1:手动关闭目标Segment

通过Coordinator API手动关闭活跃的Kafka Segment,关闭后即可立即执行markUnused操作:

POST http://<ip>:<coordinator_port>/druid/coordinator/v1/datasources/test/segments/<segment_id>/shutdown

将<segment_id>替换为你要操作的目标Segment ID。

方法2:缩短Coordinator元数据刷新周期

修改Coordinator的runtime.properties配置文件,缩短Segment状态检查的周期,让Coordinator更快识别到Segment状态变化:

# 调整为5分钟(单位:毫秒),默认通常为1小时
druid.coordinator.period.metadataRefresh=300000

修改后重启Coordinator服务即可生效。

方法3:使用强制标记参数(谨慎操作)

在markUnused请求体中添加"force": true参数,跳过Segment活跃状态检查。注意:仅确认该Segment不再写入数据时使用,避免数据丢失:

{
     "segmentIds":[
    "test_2024-02-01T00:00:00.000Z_2024-03-01T00:00:00.000Z_2024-01-30T06:16:15.950Z_6" ],
     "force": true
}

内容的提问来源于stack exchange,提问作者Bharathwajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:42:43