本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如何将日志段复制到分层存储
当您为新主题或现有主题启用分层存储时,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 设置控制消息在主存储中的保留情况。当完整日志的数据达到主存储保留设置阈值 (local.retention.ms/bytes) 时,Apache Kafka 会将主存储中的数据复制到分层存储。然后,数据就符合过期条件。
-
当 Apache Kafka 将日志段中的消息复制到分层存储时,会根据 retention.ms 或 retention.bytes 设置将该消息从集群中删除。
分层存储场景示例
此场景说明了启用分层存储后,主存储中包含消息的现有主题的行为方式。在将 remote.storage.enable 设置为 true
后,您可以启用本主题的分层存储。在此示例中,retention.ms 设置为 5 天,local.rete ntion.ms 设置为 2 天。以下是段过期时的事件序列。
时间 T0 – 启用分层存储之前。
在为本主题启用分层存储之前有两个日志段。对于现有主题分区 0,其中一个日志段处于活动状态。
时间 T1(< 2 天)– 启用了分层存储。段 0 已复制到分层存储。
为本主题启用分层存储后,Apache Kafka 会在日志段满足初始保留设置后将段 0 复制到分层存储。Apache Kafka 还会保留段 0 的主存储副本。活动段 1 尚不满足复制到分层存储的条件。在此时间表中,MSKAmazon尚未对区段0和区段1中的任何消息应用任何保留设置。 (local.retention.bytes/ms,retention.ms/bytes)
时间 T2 – 本地保留设置生效。
两天后,Apache Kafka 复制到分层存储的段 0 的主保留设置将生效。这是因为 local.retention.ms 设置为了 2 天。主存储中的段 0 现已过期。活动段 1 既不满足过期要求,也符合复制到分层存储的条件。
时间 T3 – 总体保留设置生效。
五天后,保留设置生效,Kafka 会从分层存储中清除日志段 0 和关联消息。段 1 既不满足过期要求,也不符合复制到分层存储的条件,因为它处于活动状态。段 1 尚未关闭,因此不符合段滚动的条件。