

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 如何将日志段复制到 Amazon MSK 主题的分层存储
<a name="msk-tiered-storage-retention-rules"></a>

当您为新主题或现有主题启用分层存储时，Apache Kafka 会将已关闭的日志段从主存储复制到分层存储。
+ Apache Kafka 仅复制已关闭的日志段。它将日志段中的所有消息复制到分层存储。
+ 活动区段不符合分层条件。日志段大小 (segment.bytes) 或段滚动时间 (segment.ms) 控制数据段关闭的速率，以及 Apache Kafka 随后将段复制到分层存储的速率。

启用了分层存储的主题的保留设置与未启用分层存储的主题的保留设置不同。以下规则控制启用了分层存储的主题中消息的保留情况：
+ 您可以在 Apache Kafka 中使用两个设置来定义保留期：log.retention.ms（时间）和 log.retention.bytes（大小）。这些设置决定了 Apache Kafka 在集群中保留的数据的总时长和总大小。无论是否启用分层存储模式，都需要在集群级设置这些配置。您可以使用主题配置覆盖主题级别的设置。
+ 启用分层存储时，还可以指定高性能主存储层存储数据的时长。例如，如果主题的总体保留期 (log.retention.ms) 设置为 7 天，本地保留期 (local.retention.ms) 设置为 12 小时，则集群主存储仅保留前 12 小时的数据。低成本存储层可将数据保留整整 7 天。
+ 一般的保留设置适用于完整日志。这包括其分层和主要部分。
+ local.retention.ms 或 local.retention.bytes 设置控制消息在主存储中的保留情况。Apache Kafka 在关闭的日志段后立即将其复制到分层存储（基于 segment.bytes 或 segment.ms），与本地保留设置无关。将数据段复制到分层存储后，它们将保留在主存储中，直到达到 local.retention.ms 或 local.retention.bytes 阈值。此时，数据将从主存储中删除，但在分层存储中仍可用。这使您可以将最新数据保存在高性能主存储上，以便快速访问，而较旧的数据则由低成本的分层存储提供。
+ 当 Apache Kafka 将日志段中的消息复制到分层存储时，会根据 retention.ms 或 retention.bytes 设置将该消息从集群中删除。

## Amazon MSK 分层存储场景示例
<a name="msk-tiered-storage-retention-scenario"></a>

此场景说明了启用分层存储后，主存储中包含消息的现有主题的行为方式。在将 remote.storage.enable 设置为 `true` 后，您可以启用本主题的分层存储。在此示例中，retention.ms 设置为 5 天，local.rete ntion.ms 设置为 2 天。以下是段过期时的事件序列。

**时间 T0 – 启用分层存储之前。**  
在为本主题启用分层存储之前有两个日志段。对于现有主题分区 0，其中一个日志段处于活动状态。

![\[时间 T0 – 启用分层存储之前。\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/tiered-storage-segments-1.png)


**时间 T1（< 2 天）– 启用了分层存储。段 0 已复制到分层存储。**  
为本主题启用分层存储后，Apache Kafka 会在关闭的日志段 0 关闭后立即将其复制到分层存储。区段根据分段.bytes 或 segment.ms 设置关闭，而不是基于保留设置。Apache Kafka 还会在主存储器中保留一份副本。活动分段 1 还没有资格复制到分层存储，因为它仍处于活动状态且尚未关闭。在此时间表中，Amazon MSK 尚未对区段 0 和区段 1 中的任何消息应用任何保留设置。 （本地。保留。 bytes/ms, retention.ms/bytes)

![\[时间 T1（< 2 天）– 启用了分层存储。段 0 已复制到分层存储。\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/tiered-storage-segments-2.png)


**时间 T2 – 本地保留设置生效。**  
2 天后，将达到分段 0 的本地保留阈值。这是因为 local.retention.ms 设置为了 2 天。Segment 0 现已从主存储中删除，但在分层存储中仍可用。请注意，分段 0 在分层存储关闭时已在时间 T1 被复制到分层存储，而不是在本地保留期到期时 T2。Active Segment 1 既不符合删除条件，也没有资格复制到分层存储，因为它仍然处于活动状态。

![\[时间 T2 – 本地保留设置生效。\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/tiered-storage-segments-3.png)


**时间 T3 – 总体保留设置生效。**  
 五天后，保留设置生效，Kafka 会从分层存储中清除日志段 0 和关联消息。段 1 既不满足过期要求，也不符合复制到分层存储的条件，因为它处于活动状态。段 1 尚未关闭，因此不符合段滚动的条件。

![\[时间 T3 – 总体保留设置生效。\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/tiered-storage-segments-4.png)
