Kafka科普系列 | 什么是LW和logStartOffset?
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/kafka-basic-knowledge-of-lw-and-logstartoffset/
很多讀者對 Kafka 中的 HW 的概念并不陌生,但是卻并不知道還有一個 LW 的 概念。HW 是 High Watermark 的縮寫,俗稱高水位,它標識 了一個特定的消息偏移量(offset),消費者只能拉取到這個 offset 之前的消息。
如上圖所示,它代表一個日志文件,這個日志文件中有 9 條消息,第一條消息的 offset( logStartOffset)為 0,最后一條消息的 offset 為 8,offset 為 9 的消息用虛線框表示,代表下一條待寫入的消息。日志文件的 HW 為 6,表示消費者只能拉取到 offset 在 0 至 5 之間的消息, 而 offset 為 6 的消息對消費者而言是不可見的。
而LW 是 Low Watermark 的縮寫,俗稱“低水位”,代表 AR 集合中最小的 logStartOffset 值。副本的拉取請求(FetchRequest,它有可能觸發(fā)新建日志分段而舊的被清理,進而導致 logStartOffset 的增加)和刪除消息請求(DeleteRecordRequest)都有可能促使 LW 的增長。
在 Kafka 的日志管理器中會有一個專門的日志刪除任務(wù)來周期性地檢測和刪除不符合保留條件的日志分段文件,這個周期可以通過 broker 端參數(shù) log.retention.check.interval.ms來配置,默認值為 300000,即 5 分鐘。當前日志分段的保留策略有 3 種:基于時間的保留策略、基于日志大小的保留策略和基于日志起始偏移量的保留策略。而“基于日志起始偏移量的保留策略”正是基于 logStartOffset來實現(xiàn)的。
一般情況下,日志文件的起始偏移量 logStartOffset 等于第一個日志分段的 baseOffset,但這并不是絕對的,logStartOffset 的值可以通過 DeleteRecordsRequest 請求(比如使用 KafkaAdminClient 的 deleteRecords()方法、使用 kafka-delete-records.sh 腳本、日志的清理和截斷等操作進行修改。
基于日志起始偏移量的保留策略的判斷依據(jù)是某日志分段的下一個日志分段的起始偏移量 baseOffset 是否小于等于 logStartOffset,若是,則可以刪除此日志分段。如下圖所示。
假設(shè) logStartOffset 等于 25,日志分段 1 的起始偏移量為 0,日志分段 2 的起始偏移量為 11, 日志分段 3 的起始偏移量為 23,那么通過如下動作收集可刪除的日志分段的文件集合 deletableSegments:
從頭開始遍歷每個日志分段,日志分段 1 的下一個日志分段的起始偏移量為11,小于logStartOffset 的大小,將日志分段1加入 deletableSegments。
日志分段 2 的下一個日志偏移量的起始偏移量為 23,也小于 logStartOffset 的大小, 將日志分段 2 頁加入 deletableSegments。
日志分段 3 的下一個日志偏移量在 logStartOffset 的右側(cè),故從日志分段 3 開始的所有日志分段都不會加入 deletableSegments。
收集完可刪除的日志分段的文件集合之后的刪除操作同基于日志大小的保留策略和基于時間的保留策略相同,具體的可以參看之前的文章《Kafka 日志清理之Log Deletion》,這里不再贅述。
注意LogStartOffset不可以縮寫為LSO,因為在Kafka中,LSO特指LogStableOffset,這個會在后面的《Kafka科普系列 | 什么是LSO?》中一一指出。
來源:本文摘錄自《深入理解Kafka》一書中若干篇幅。
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/kafka-basic-knowledge-of-lw-and-logstartoffset/
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計與實踐原理》和《RabbitMQ實戰(zhàn)指南》,同時歡迎關(guān)注筆者的微信公眾號:朱小廝的博客。
 
總結(jié)
以上是生活随笔為你收集整理的Kafka科普系列 | 什么是LW和logStartOffset?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Kafka最全面试题整理|划重点要考
- 下一篇: Kafka科普系列 | 什么是LSO?
