Kafka 消息保留機制

  • log.retention.ms 消息時間
    Kafka通常根據時間決定數據可以保留多久。默認使用log.retention.hours參數配置時間,默認值是168小時,也就是一週。除此之外,還有其他兩個參數,log.retention.minuteslog.retention.ms,這三個參數作用是一樣的,都是決定消息多久以會被刪除,不過還是推薦使用log.retention.ms,如果指定了不止一個參數,Kafka會優先使用最小值的那個參數。
  • log.retention.bytes 消息大小
    通過保留的消息字節數來判斷小是否過期,它的值通過參數log.retention.bytes來指定,作用在每一個分區上,也就是說如果一個包含8個分區的主題,並且log.retention.bytes被設置爲1GB,那麼這個主題最多可以保留8GB的數據,所以,當主題的分區個數增加時,整個主題可以保留的數據也隨之增加。

如果同時指定了兩個參數沒只要任意一個參數得到滿足,消息就會被刪除。例如,假設log.retention.ms爲86400000(也就是一天),log.retention.bytes的值設置爲1GB,如果消息字節總數在不到一天的時間就超過了1GB,那麼堆出來的部分就會被刪除,相反,如果消息字節總數小與1GB,那麼一天之後這些消息也會被刪除,儘管分區的數據總量小於1GB

  • log.segment.bytes 日誌片段大小
    當消息來到broker是,它們就會被追加到分區的當前日誌片段上,當日志片段大小到達log.segment.bytes指定的上限(默認是1GB)時,當前日誌片段就會被關閉,一個新的日誌片段就會被打開。如果一個日誌之片段被關閉,就開始等待過期時間。這個參數的值越小們就會越頻繁的關閉和分配新文件,從而降低了磁盤寫入的整體效率。
  • log.segment.ms 日誌片段時間
    指定了多長時間之後日誌片段會被關閉,就像log.retention.byteslog.retention.ms這兩個參數一樣。log.segment.byteslog.segment.ms這兩個參數之間也不存在互斥問題。日誌片段會在大小或時間達到上限時被關閉,就看哪個條件曉得到滿足。默認情況下log.segment.ms沒有設定值,所以只根據大小來關閉日誌片段
  • message.max.bytes 單條消息大小
  • broker通過設置message.max.bytes參數來限制單個消息的大小,默認值時1000000,也就是1MB。如果生產者嘗試發送的消息超過1MB,不僅消息不會被接受,還會受到broker返回的錯誤信息。跟其他與字節相關的配置參數一樣,該參數指的是壓縮後的消息大小,也就是說,只要壓縮後的消息小於message.max.bytes指定的值,消息的實際大小可以遠大於這個值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章