我想更新 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.bytes 或 log.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.bytes 或 log.roll.ms 值,並降低區段的值。如果設定較小的值,那麼您可以頻繁建立區段並停用較舊的區段。
- 微調 segment.ms 和 segment.bytes 參數以平衡儲存效率和代理程式效能。不要將參數設定得太低,因為這會增加 CPU 額外負荷,並可能對您的代理程式資源造成壓力。
注意:log.segments.bytes 和 log.roll.ms 是代理程式層級區段設定。segment.bytes 和 segment.ms 是主題層級區段設定。主題層級設定優先於代理程式層級設定。
相關資訊
Apache Kafka 網站上的 retention.ms