跳转到主要内容

使用规则删除和保留数据

数据保留规则允许您配置 Apache Druid 以符合您的数据保留策略。您的数据保留策略指定了要在集群中保留哪些数据以及丢弃哪些数据。

Druid 支持 加载 (load)丢弃 (drop)广播 (broadcast) 规则。每条规则都是一个 JSON 对象。详情请参阅下方的规则定义

您可以配置一组应用于所有数据源的默认规则,和/或为特定数据源设置特定规则。请参阅规则结构以了解规则顺序如何影响 Coordinator 应用保留规则的方式。

您可以通过以下方式指定要保留或丢弃的数据:

  • 永久 (Forever):段 (segment) 中的所有数据。
  • 周期 (Period):指定为从当前时间开始的一个偏移量的段数据。
  • 区间 (Interval):一个固定的时间范围。

保留规则是持久化的:它们在您更改之前一直有效。Druid 将保留规则存储在其元数据存储中。

设置保留规则

您可以使用 Druid Web 控制台服务状态 API 参考来创建和管理保留规则。

使用 Web 控制台

要在 Druid Web 控制台中设置保留规则:

  1. 在控制台主页上,点击 Datasources(数据源)。
  2. 点击您的数据源名称以打开数据窗口。
  3. 选择 Actions > Edit retention rules(操作 > 编辑保留规则)。
  4. 点击 +New rule(新建规则)。
  5. 选择规则类型并设置规则属性。
  6. 点击 Next(下一步)并为规则输入描述。
  7. 点击 Save(保存)以保存并将规则应用到数据源。

使用 Coordinator API

要为所有数据源设置一条或多条默认保留规则,请向 /druid/coordinator/v1/rules/_default 发送包含每条规则 JSON 对象的 POST 请求。

以下示例请求为所有数据源设置了一个默认的永久广播规则:

curl --location --request POST 'https://:8888/druid/coordinator/v1/rules/_default' \
--header 'Content-Type: application/json' \
--data-raw '[{
"type": "broadcastForever"
}]'

要为特定数据源设置一条或多条保留规则,请向 /druid/coordinator/v1/rules/{datasourceName} 发送包含每条规则 JSON 对象的 POST 请求。

以下示例请求为 wikipedia 数据源设置了一个周期丢弃规则和一个周期广播规则:

curl --location --request POST 'https://:8888/druid/coordinator/v1/rules/wikipedia' \
--header 'Content-Type: application/json' \
--data-raw '[{
"type": "dropByPeriod",
"period": "P1M",
"includeFuture": true
},
{
"type": "broadcastByPeriod",
"period": "P1M",
"includeFuture": true
}]'

要检索所有数据源的所有规则,请向 /druid/coordinator/v1/rules 发送 GET 请求——例如:

curl --location --request GET 'https://:8888/druid/coordinator/v1/rules'

规则结构

规则 API 接受作为 JSON 对象数组的规则。您在 API 请求中为每条规则发送的 JSON 对象特定于下面概述的规则类型。

信息

您必须在每次 API 请求中传递完整的规则数组,并按您期望的顺序排列。每次对规则 API 的 POST 请求都会覆盖指定数据源的现有规则。

规则的顺序非常重要。Coordinator 按规则在规则列表中出现的顺序读取规则。例如,在下方的截图中,Coordinator 会根据规则 1、规则 2、然后规则 3 来评估数据。

retention rules

Coordinator 会循环遍历所有已使用 (used) 的段,并将每个段与第一个适用的规则进行匹配。每个段只能匹配一条规则。

在 Web 控制台中,您可以使用界面右侧的向上和向下箭头来更改规则的顺序。

加载规则

加载规则定义了 Druid 如何将段分配给 Historical 进程层级,以及每个层级中存在多少个段副本。

如果您只有一个层级,Druid 会自动将该层级命名为 _default。如果您定义了额外的层级,则必须定义一个加载规则来指定在该层级上加载哪些段。在您定义加载规则之前,您的新层级将保持为空。

所有加载规则都可以具有以下属性:

属性描述是否必须默认值
tieredReplicants从层级名称到将在这些层级上加载的段副本数量的映射。每个层级的副本数必须为 0 或正整数。useDefaultTierForNulltrue 时,默认值为 {"_default_tier": 2},即在 _default_tier 上加载 2 个副本。

useDefaultTierForNullfalse 时,默认值为 {},即不在任何层级上加载副本。
useDefaultTierForNull如果未指定或设置为 null,则确定 tieredReplicants 的默认值。true

下面讨论的特定类型的加载规则可能还具有其他属性。

加载规则也是您利用从深层存储查询数据所带来的资源节省优势的方式。配置数据的一种方法是,将某些段的 tieredReplicants 设置为空数组,并将 useDefaultTierForNull 设置为 false(按区间或周期),这样这些段就不会加载到 Historical 层级上,但仍然可以从深层存储进行查询。

永久加载规则

永久加载规则将所有数据源段分配给指定的层级。这是 Druid 应用于数据源的默认规则。永久加载规则的类型为 loadForever

以下示例将每个段的一个副本放置在名为 hot 的自定义层级上,并将另一个单一副本放置在默认层级上。

{
"type": "loadForever",
"tieredReplicants": {
"hot": 1,
"_default_tier": 1
}
}

设置以下属性:

  • tieredReplicants:层级名称到该层级段副本数量的映射。
  • useDefaultTierForNull:此参数确定 tieredReplicants 的默认值,并且仅在字段不存在时生效。useDefaultTierForNull 的默认值为 true。

周期加载规则

您可以使用周期加载规则将特定周期内的段数据分配给一个层级。Druid 将段的区间与您在规则中指定的周期进行比较,并加载匹配的数据。

周期加载规则的类型为 loadByPeriod。以下示例将一个月周期内的数据的一个副本放置在名为 hot 的自定义层级上,并将另一个单一副本放置在默认层级上。

{
"type": "loadByPeriod",
"period": "P1M",
"includeFuture": true,
"tieredReplicants": {
"hot": 1,
"_default_tier": 1
}
}

设置以下属性:

  • period:代表 ISO 8601 周期的 JSON 对象。周期是从过去某时到当前时间,如果 includeFuture 设置为 true,则涵盖未来。

  • includeFuture:一个布尔标志,用于指示 Druid 在以下情况下匹配段:

    • 段区间与规则区间重叠,或者
    • 段区间在规则区间开始后的任何时间开始。

    您可以使用此属性加载具有未来开始和结束日期的段,其中“未来”是相对于 Coordinator 根据规则评估数据的时间而言的。默认值为 true

  • tieredReplicants:层级名称到该层级段副本数量的映射。

  • useDefaultTierForNull:此参数确定 tieredReplicants 的默认值,并且仅在字段不存在时生效。useDefaultTierForNull 的默认值为 true。

区间加载规则

您可以使用区间规则将特定范围的数据分配给一个层级。例如,分析师通常可能使用上周所有数据的完整数据集,而不太使用当前周的数据。

区间加载规则的类型为 loadByInterval。以下示例将匹配指定区间的数据的一个副本放置在名为 hot 的自定义层级上,并将另一个单一副本放置在默认层级上。

{
"type": "loadByInterval",
"interval": "2012-01-01/2013-01-01",
"tieredReplicants": {
"hot": 1,
"_default_tier": 1
}
}

设置以下属性:

  • interval:作为 ISO 8601 范围并编码为字符串的加载区间。
  • tieredReplicants:层级名称到该层级段副本数量的映射。
  • useDefaultTierForNull:此参数确定 tieredReplicants 的默认值,并且仅在字段不存在时生效。useDefaultTierForNull 的默认值为 true。

丢弃规则

丢弃规则定义了 Druid 何时从集群中丢弃段。Druid 会将丢弃的数据保留在深层存储中。请注意,如果您启用了对未使用段的自动清理,或者运行了 kill 任务,Druid 将从深层存储中删除该数据。有关删除数据的更多信息,请参阅数据删除

如果您想使用加载规则仅保留定义时间段内的数据,则还必须定义丢弃规则。如果您不定义丢弃规则,Druid 将根据默认规则 loadForever 保留不位于您定义周期内的数据。

永久丢弃规则

永久丢弃规则会从集群中丢弃所有段数据。如果您配置了一组规则,并将永久丢弃规则作为最后一条规则,Druid 将丢弃评估高优先级规则后剩余的所有段数据。

永久丢弃规则的类型为 dropForever

{
"type": "dropForever"
}

周期丢弃规则

Druid 将段的区间与您在规则中指定的周期进行比较,并丢弃匹配的数据。如果周期包含段区间,则规则匹配。此规则始终丢弃最近的数据。

周期丢弃规则的类型为 dropByPeriod,具有以下 JSON 结构:

{
"type": "dropByPeriod",
"period": "P1M",
"includeFuture": true
}

设置以下属性:

  • period:代表 ISO 8601 周期的 JSON 对象。周期是从过去某时到未来或当前时间,具体取决于 includeFuture 标志。

  • includeFuture:一个布尔标志,用于指示 Druid 在满足以下任一条件时匹配段:

    • 段区间与规则区间重叠
    • 段区间在规则区间开始后的任何时间开始

    您可以使用此属性丢弃具有未来开始和结束日期的段,其中“未来”是相对于 Coordinator 根据规则评估数据的时间而言的。默认值为 true

周期丢弃前规则

Druid 将段的区间与您在规则中指定的周期进行比较,并丢弃匹配的数据。如果段区间早于指定的周期,则规则匹配。

如果您只想保留最近的数据,可以使用此规则丢弃指定周期之前的老数据,并添加一条 loadForever 规则来保留随后的数据。请注意,规则组合 dropBeforeByPeriod + loadForever 等效于 loadByPeriod(includeFuture = true) + dropForever

周期丢弃前规则的类型为 dropBeforeByPeriod,具有以下 JSON 结构:

{
"type": "dropBeforeByPeriod",
"period": "P1M"
}

设置以下属性:

  • period:代表 ISO 8601 周期的 JSON 对象。

区间丢弃规则

您可以使用区间丢弃规则来防止 Druid 将指定范围的数据加载到任何层级上。该范围通常是您最旧的数据。丢弃的数据保留在深层存储中,并且仍然可以从深层存储进行查询

区间丢弃规则的类型为 dropByInterval,具有以下 JSON 结构:

{
"type": "dropByInterval",
"interval": "2012-01-01/2013-01-01"
}

设置以下属性:

  • interval:作为 ISO 8601 范围并编码为字符串的丢弃区间。

广播规则

Druid 扩展使用广播规则将段数据加载到集群中的所有 Broker 上。请在测试环境而不是生产环境中应用广播规则。要使用广播规则,请确保在 Broker 和 Historical 上都配置了 druid.segmentCache.locations。这确保了 Druid 可以将段加载到这些服务器上。有关更多信息,请参阅段缓存大小

永久广播规则

永久广播规则将数据源中的所有段数据加载到集群中的所有 Broker 上。

永久广播规则的类型为 broadcastForever

{
"type": "broadcastForever"
}

周期广播规则

Druid 将段的区间与您在规则中指定的周期进行比较,并将匹配的数据加载到集群中的 Broker 上。

周期广播规则的类型为 broadcastByPeriod,具有以下 JSON 结构:

{
"type": "broadcastByPeriod",
"period": "P1M",
"includeFuture": true
}

设置以下属性:

  • period:代表 ISO 8601 周期的 JSON 对象。周期是从过去某时到未来或当前时间,具体取决于 includeFuture 标志。

  • includeFuture:一个布尔标志,用于指示 Druid 在满足以下任一条件时匹配段:

    • 段区间与规则区间重叠
    • 段区间在规则区间开始后的任何时间开始。

    您可以使用此属性广播具有未来开始和结束日期的段,其中“未来”是相对于 Coordinator 根据规则评估数据的时间而言的。默认值为 true

区间广播规则

区间广播规则将特定范围的数据加载到集群中的 Broker 上。

区间广播规则的类型为 broadcastByInterval,具有以下 JSON 结构:

{
"type": "broadcastByInterval",
"interval": "2012-01-01/2013-01-01"
}

设置以下属性:

  • interval:作为 ISO 8601 范围并编码为字符串的广播区间。

永久删除数据

Druid 可以完全从集群中丢弃数据、擦除元数据存储条目,并为标记为 unused(未使用)的任何段从深层存储中删除数据。请注意,Druid 总是会将规则丢弃的段标记为 unused。您可以向 Overlord 提交 kill 任务来完成此操作。

重新加载丢弃的数据

您不能使用单个规则来重新加载 Druid 从集群中丢弃的数据。

要重新加载丢弃的数据:

  1. 设置您的保留周期——例如,将保留周期从一个月更改为两个月。
  2. 使用 Web 控制台或 API 将属于该数据源的所有段标记为 used(已使用)。

这会提示 Druid 重新运行 Coordinator 规则并加载所有缺失的段。Coordinator 会识别段的最新版本并丢弃较旧的版本。

了解更多

有关在 Druid 中使用保留规则的更多信息,请参阅以下主题: