[英]Kafka Topic Retention and impact on the State store in Kafka streams
我在 Kafka 流字數統計應用程序中有一個狀態存儲(使用Materialized.as()
)。
根據我的理解,狀態存儲在 Kafka 內部主題中維護。
如果可用,請與解決方案的來源一起發布。
狀態存儲是否可以擁有無限的鍵值對,或者它們受基於 log.retention 策略或 log.segment.bytes 的 kafka 主題規則的約束?
是的,狀態存儲可以有無限的鍵值對 = 事件(或“消息”)。 好吧,當然,Kafka 中的本地應用程序存儲空間和遠程存儲空間允許(后者用於將數據持久存儲在您的狀態存儲中)。
您的應用程序的狀態存儲遠程保存在壓縮的內部 Kafka 主題中。 壓縮意味着 Kafka 會定期從存儲中清除相同事件鍵(例如 Bob 的舊帳戶余額)的舊事件。 但是壓縮主題不會刪除每個事件鍵的最新事件(例如,Bob 的當前帳戶余額)。 壓縮主題中將存儲多少這樣的“唯一”鍵值對沒有上限。
我設置了 log.retention.ms=60000 並期望狀態存儲值在一分鍾后重置為 0。 但我發現它並沒有發生,我仍然可以從狀態存儲中看到值。
log.retention.ms
當主題被配置為被壓實不使用( log.cleanup.policy=compact
)。 有關詳細信息,請參閱現有 SO 問題日志壓縮以保留每個鍵的一條消息以獲取詳細信息,包括為什么壓縮不會立即發生(簡而言之,這是因為壓縮對分區段文件進行操作,它不會觸及最新的段文件,並且該文件中的每個事件鍵可以是多個事件)。
注意:您現在可以使用log.cleanup.policy=compact,delete
將配置log.cleanup.policy
設置為壓縮和基於時間/體積的保留的組合(有關詳細信息log.cleanup.policy=compact,delete
請參閱KIP-71 )。 但一般來說,除非您真的知道自己在做什么,否則您不應該擺弄這個設置——默認值是您 99% 的時間所需要的。
kafka 是完全清除日志還是保留 SNAPSHOT 以防日志壓縮主題? “提交段”是什么意思?
我不明白這個問題,不幸的是。 :-) 也許我之前的答案和參考鏈接已經涵蓋了您的需求。 我能說的是,不,Kafka 並沒有完全清除日志。 壓縮對主題分區的段文件進行操作。 您可能需要詳細了解壓縮的工作原理,為此我建議寫一篇文章,如https://medium.com/@sunny_81705/kafka-log-retention-and-cleanup-policies-c8d9cb7e09f8 ,以防 Apache Kafka文檔還不夠清楚。
狀態存儲由壓縮的內部主題維護。 因此,它們遵循壓縮主題的相同語義,並且必須具有有限的保留時間
https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Internal+Data+Management
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.