学习 Druid(七):初识 Segment

更新至 Druid 0.15.1 版本

生命周期

Druid 参考了 LSM-Tree(日志结构合并树 Log-structured merge-tree)的实现,即提供了数据的快速摄入的能力,也提供了数据的海量存储的能力。

LSM-Tree

与经典 LSM-Tree 不同的是,Druid 没有 WAL 的过程也没有 SSTable 合并的过程。

Segment Lifecycle

生命周期:

  1. Source 数据经过 MiddleManager 索引(index)生成 Segment 文件;
  2. Segment 文件被推送(push)到 Deep Storage;
  3. Segment 文件被加载(load)到 Historical。

结构

TODO

状态

published

Segment 元数据插入 Metadata Storage,Segment 文件推到 Deep Storage。

Segment 元数据表为 druid.druid_segment,表结构如下:

字段名 类型 描述
id varchar(255) 主键
dataSource varchar(255) 所属 DataSource
created_date varchar(255) 创建时间
start varchar(255) 分区开始时间
end varchar(255) 分区结束时间
partitioned boolean 是否分区?
version varchar(255) 版本
used boolean 是否使用?
payload blob JSON 格式,Segment 元数据

Segment 文件位置由配置项 druid.storage.storageDirectory 决定,目录结构:

segments  
 - DataSource
   - Partition
     - Version
       - Segment File

used

Segment 是否可用。是 Segment 元数据表 druid.druid_segment 上的标记位。

删除 DataSource 元数据,将 DataSource 所有 Segment 置为 unused:

curl -X DELETE <DRUID_ROUTER_URI>/druid/coordinator/v1/datasources/<DATA_SOURCE>  

将 DataSource 时间范围内所有 Segment 置为 unused:

curl -X POST -H 'Content-Type:application/json' -d '{ "interval" : "2019-10-01T00:00:00.000Z/2019-10-08T00:00:00.000Z" }' <DRUID_ROUTER_URI>/druid/coordinator/v1/datasources/<DATA_SOURCE>/markUnused  

彻底删除 Segment 数据,必须先将 Segment 置为 unused,然后启动 Kill 任务删除被置为 unused 的 Segment 在 Metadata Storage 上的元数据和 Deep Storage 上的文件。

参考