学习 Druid(八):数据合并

Druid 提供了两种数据合并的方式:

  • 手动合并:提交合并任务
  • 自动合并:系统周期提交合并任务

手动合并

提交任务,以合并 2019 年 10 月 1 日至 2019 年 10 月 8 日期间的数据,时间粒度为天(day):

{
    "type": "compact",
    "dataSource": "<DATA_SOURCE>",
    "interval": "2019-10-01/2019-10-08",
    "segmentGranularity": "day"
}

配置项 type,compact,必填;

配置项 dataSource,必填;

配置项 interval,时间范围,必填;

配置项 segmentGranularity,时间粒度。

自动合并

可选,设置用于执行自动合并资源,公式:

min(max, ratio * total task slots)  

配置项 ratio,可利用的所有资源槽的比率,默认为 0.1;

配置项 max,可利用的最多的资源槽,默认为无限。

查看资源:

curl -X GET <DRUID_ROUTER_URI>/druid/coordinator/v1/config/compaction  

设置资源:

curl -X POST '<DRUID_ROUTER_URI>/druid/coordinator/v1/config/compaction/taskslots?ratio=0.25&max=4'  

配置 DataSource 自动合并,可以通过 UI 界面配置:

Compaction Config

配置项 inputSegmentSizeBytes,合并任务可以合并的 Segment 总大小;

配置项 maxNumSegmentsToCompact,合并任务可以合并的 Segment 总数;

配置项 skipOffsetFromLatest,搜索需要合并的 Segment 偏移量,一般设置与 DataSource 的时间粒度(granularitySpec.segmentGranularity)保持一致;

配置项 targetCompactionSizeBytes,合并之后 Segment 大小。

永久删除

合并任务本质上是覆盖操作(Overrite),合并之前的的旧数据只是被置为禁用状态。为了释放资源清理旧数据,可以提交 Kill 任务永久删除旧数据。

{
    "type": "kill",
    "dataSource": "<DATA_SOURCE>",
    "interval": "2019-10-01/2019-10-08"
}

参考