跳至內容

如何設定 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 網站上的更新程式組態更新預設主題組態

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 年前