Kafka 消息保留機制


log.retention.ms 消息時間
Kafka通常根據時間決定數據可以保留多久。默認使用log.retention.hours參數配置時間,默認值是168小時,也就是一周。除此之外,還有其他兩個參數,log.retention.minutes和log.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.bytes和log.retention.ms這兩個參數一樣。log.segment.bytes和log.segment.ms這兩個參數之間也不存在互斥問題。日志片段會在大小或時間達到上限時被關閉,就看哪個條件曉得到滿足。默認情況下log.segment.ms沒有設定值,所以只根據大小來關閉日志片段
message.max.bytes 單條消息大小
broker通過設置message.max.bytes參數來限制單個消息的大小,默認值時1000000,也就是1MB。如果生產者嘗試發送的消息超過1MB,不僅消息不會被接受,還會受到broker返回的錯誤信息。跟其他與字節相關的配置參數一樣,該參數指的是壓縮后的消息大小,也就是說,只要壓縮后的消息小於message.max.bytes指定的值,消息的實際大小可以遠大於這個值。
————————————————
版權聲明:本文為CSDN博主「蝸牛你慢點Ⅷ」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Tony10010/article/details/89553557


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM