簡體   English   中英

Kafka Topic Retention 和對 Kafka 流中狀態存儲的影響

[英]Kafka Topic Retention and impact on the State store in Kafka streams

我在 Kafka 流字數統計應用程序中有一個狀態存儲(使用Materialized.as() )。
根據我的理解,狀態存儲在 Kafka 內部主題中維護。


以下問題是:

  1. 狀態存儲是否可以擁有無​​限的鍵值對,或者它們受基於 log.retention 策略或 log.segment.bytes 的 kafka 主題規則的約束?
  2. 我設置了 log.retention.ms=60000 並期望狀態存儲值在一分鍾后重置為 0。 但我發現它並沒有發生,我仍然可以從狀態存儲中看到值。 kafka 是完全清除日志還是保留 SNAPSHOT 以防日志壓縮主題?
  3. “提交段”是什么意思?

如果可用,請與解決方案的來源一起發布。

狀態存儲是否可以擁有無​​限的鍵值對,或者它們受基於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM