跳至内容

如何配置 MSK 集群的保留期?

2 分钟阅读
0

我想更新我的 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 集群的保留期。

简短描述

使用 Amazon MSK 数据保留期来控制在 MSK 集群中存储的数据量。设置保留期后,系统可以自动删除不需要的旧消息,这可能会降低存储成本并提升集群性能。

默认情况下,Amazon MSK 数据保留期为 7 天。但是,您可以修改保留期以满足您的需求。如果未正确配置保留期,则 Amazon MSK 可能无法在正确的时间范围内删除您的数据。

Apache Kafka 会将主题分区划分为多个分段。默认的最大分段大小为 1 GB。要更改最大大小,请在代理级别更新 log.segment.bytes,或在主题级别更新 segment.bytes。有关详细信息,请参阅 Apache Kafka 网站上的 Updating broker configs(更新代理配置)Updating default topic configuration(更新默认主题配置)

Apache Kafka 还使用 log.roll.ms 来控制分段的生命周期。这些设置决定了分段的最长期限,默认值为 168 小时。仅当 segments.byteslog.roll.ms 达到配置的限制值时,Apache Kafka 才会创建新的分段。一旦 Apache Kafka 创建了新分段,旧分段就会变为非活动状态。然后,当新分段达到配置的 retention.ms 值时,MSK 会删除旧分段。

**注意:**只能删除非活动的分段。

解决方法

要配置保留期,请修改您的 retention.ms 参数和 segment.ms 设置。

例如,如果您将 segment.ms 的值设置为 24hrs,将 retention.ms 的值设置为 24hrs,则 Amazon MSK 会在 48 小时后删除数据。该分段随后将变为非活动状态,具体取决于该分段是先达到 24 小时的时间范围还是先达到 1 GB 的数据限制。

要在 24 小时后删除数据,请将默认的 segment.ms 值减小至 1hr,将 retention.ms 减小至 23hrs。Amazon MSK 会在 24 小时后或分段达到配置的大小值时删除数据,以先到者为准。

要计算所有主题的当前大小,请在 Amazon MSK 的 Apache Kafka 命令行界面 (CLI) 上运行以下命令:

./kafka-topics.sh --command-config client.properties --bootstrap-server $BK --list |
xargs -I{} sh -c "echo -n '{} - ' &&
./kafka-log-dirs.sh --command-config client.properties --bootstrap-server $BK --topic-list {} --describe |
grep '^{'  |
jq '[ ..|.size? | numbers ] | add' |
numfmt --to iec " |
tee /tmp/topics-by-size.list

**注意:**上述命令使用 Apache Kafka CLI 列出所有主题,然后计算并返回每个主题的大小。

输出示例:

BrandNewTopic - 0
CrossAccountMskTopic - 0
NewTopicwithNewInstance - 0
SameAccountMskTopic - 0
Test - 0
__amazon_msk_canary - 4.6M
__consumer_offsets - 33M
dataloss - 1.8K
datalossB1 - 999
provisioned - 0

以下是存储利用率的最佳实践:

  • 检查您的 log.segments.byteslog.roll.ms 值,并减小分段的值。如果您设置的值较小,则可以频繁地创建分段并停用较旧的分段。
  • 微调 segment.mssegment.bytes 参数,以平衡存储效率和代理性能。不要将这些参数设置得过低,因为这会产生额外的 CPU 开销,并可能导致代理资源紧张。

**注意:**log.segments.byteslog.roll.ms 是代理级别的分段设置,而 segment.bytessegment.ms 是主题级别的分段设置。主题级别设置的优先级高于代理级别设置。

相关信息

Apache Kafka 网站上的 retention.ms

AWS 官方已更新 1 年前