Kafka到底有幾個Offset?——Kafka核心之偏移量機制

圖片描述
​ Kafka是由LinkIn開源的實時數據處理框架,目前已經更新到2.3版本。不同於一般的消息中間件,Kafka通過數據持久化和磁盤讀寫獲得了極高的吞吐量,並可以不依賴Storm,SparkStreaming的流處理平臺,自己進行實時的流處理。

​ Kakfa的Offset機制是其最核心機制之一,由於API對於部分功能的實現,我們有時並沒有手動去設置Offset,那麼Kafka到底有幾個Offset呢?

一、生產者Offset

​ 首先,我們先來看生產者的offset,我們知道Kafka是通過生產者將消息發送給某一個topic,消費者再消費這個topic的消息,當然可能有多個生產者,多個消費者,還可能有消費者組的概念,這個稍後在討論。

​ 當生產者將消息發送給某一個topic時,要看有多少個分區,因爲kafka是通過分區機制實現分佈式的。

圖片描述

圖 生產者offset

通過此圖可以清晰的看到生產者的offset原理,不管是多少個生產者,還是我們規定了他們會寫入哪一個分區,但只要他們寫入的時候,一定是每一個分區都有一個offset,這個offset就是生產者的offset,同時也是這個分區的最新最大的offset。

有些時候我們在開發生產者代碼時並沒有指定某一個分區的offset,可能是我們使用的單分區,或者默認均勻的寫入多個分區,這個工作kafka幫我們完成了。

二、消費者Offset

再來看消費者端offset,要稍微複雜一些。

圖片描述

圖 消費者offset

這是某一個分區的offset情況,我們已經知道生產者寫入的offset是最新最大的值也就是12,而當Consumer A進行消費時,他從0開始消費,一直消費到了9,他的offset就記錄在了9,Consumer B就紀錄在了11。等下一次他們再來消費時,他們可以選擇接着上一次的位置消費,當然也可以選擇從頭消費,或者跳到最近的記錄並從“現在”開始消費。

這樣即使有多個分區,消費者也能靈活使用。

圖片描述

圖 消費者組

消費者組的概念其實並不影響對offset的理解,上面的情況Consumer A,Consumer B如果是同組就不能同時消費一個分區的消息,不同組的消費者可以同時消費一個分區的消息。

還有一種offset的說法,就是consumer消費未提交時,本地是有另外一個offset的,這個offset不一定與集羣中記錄的offset一致。

所以,kafka每一個topic分區和生產者,消費者不同,是有多個offset的。

總結如下:

offset是指某一個分區的偏移量。

topic partition offset 這三個唯一確定一條消息。

生產者的offset其實就是最新的offset。

消費者的offset是他自己維護的,他可以選擇分區最開始,最新,也可以記住他消費到哪了。

消費者組是爲了不同組的消費者可以同時消費一個分區的消息。

更多Kafka相關技術文章:

什麼是Kafka?
Kafka監控工具彙總
Kafka快速入門
Kafka核心之Consumer
Kafka核心之Producer

更多實時計算,Flink,Kafka等相關技術博文,歡迎關注實時流式計算

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章