Kafka中的HW LEO LSO等分別代表什麼?

2022-07-05 04:18:07 字數 1531 閱讀 9203

hw(high watermark)俗稱高水位,它標識了乙個特定的訊息偏移量(offset),消費者只能拉取到這個offset之前的訊息。

下圖表示乙個日誌檔案,這個日誌檔案中只有9條訊息,第一條訊息的offset(logstartoffset)為0,最有一條訊息的offset為8,offset為9的訊息使用虛線表示的,代表下一條待寫入的訊息。日誌檔案的 hw 為6,表示消費者只能拉取offset在 0 到 5 之間的訊息,offset為6的訊息對消費者而言是不可見的。

leo(log end offset),標識當前日誌檔案中下一條待寫入的訊息的offset。上圖中offset為9的位置即為當前日誌檔案的 leo,leo 的大小相當於當前日誌分割槽中最後一條訊息的offset值加1.分割槽 isr 集合中的每個副本都會維護自身的 leo ,而 isr 集合中最小的 leo 即為分割槽的 hw,對消費者而言只能消費 hw 之前的訊息。

下面具體分析一下 isr 集合和 hw、leo的關係。

假設某分割槽的 isr 集合中有 3 個副本,即乙個 leader 副本和 2 個 follower 副本,此時分割槽的 leo 和 hw 都分別為 3 。訊息3和訊息4從生產者出發之後先被存入leader副本。

在訊息被寫入leader副本之後,follower副本會傳送拉取請求來拉取訊息3和訊息4進行訊息同步。

在同步過程中不同的副本同步的效率不盡相同,在某一時刻follower1完全跟上了leader副本而follower2只同步了訊息3,如此leader副本的leo為5,follower1的leo為5,follower2的leo 為4,那麼當前分割槽的hw取最小值4,此時消費者可以消費到offset0至3之間的訊息。

當所有副本都成功寫入訊息3和訊息4之後,整個分割槽的hw和leo都變為5,因此消費者可以消費到offset為4的訊息了。

由此可見kafka的複製機制既不是完全的同步複製,也不是單純的非同步複製。事實上,同步複製要求所有能工作的follower副本都複製完,這條訊息才會被確認已成功提交,這種複製方式極大的影響了效能。而在非同步複製的方式下,follower副本非同步的從leader副本中複製資料,資料只要被leader副本寫入就會被認為已經成功提交。在這種情況下,如果follower副本都還沒有複製完而落後於leader副本,然後leader副本宕機,則會造成資料丟失。kafka使用這種isr的方式有效的權衡了資料可靠性和效能之間的關係。

Kafka中的Message Delivary機制

學習kafka的讀書筆記,暫未把文章設為翻譯型別,因為並非直譯文件。水平有限,還請路過高手指正。1 最多 傳送 一次 at most once 訊息可以丟失但絕不會重新傳送 2 至少 傳送 一次 at least once 訊息絕不會丟失但是可能會被重新傳送 3 僅 傳送 一次 exactly on...

Kafka學習之旅 五 Kafka中的壓縮

kafka 會為我們保留一定量時間的資料那麼為kafka 選擇乙個合適的壓縮演算法是非常重要的,可以在節約儲存空間的同時又將效率影響到最低。在 kafka 中,壓縮可能發生在兩個地方 生產者端和 broker 端。生產者程式中配置 compression.type 引數即表示啟用指定型別的壓縮演算法...

Kafka科普系列Kafka中的事務是什麼樣子的

inittransactions 方法用來初始化事務 begintransaction 方法用來開啟事務 sendoffsetstotransaction 方法為消費者提供在事務內的位移提交的操作 committransaction 方法用來提交事務 aborttransaction 方法用來中止事...