共計 1321 個字符,預計需要花費 4 分鐘才能閱讀完成。
這篇文章給大家介紹 Kafka 核心中的偏移量機制 Offset 是怎么樣的,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Kafka 是由 LinkIn 開源的實時數(shù)據(jù)處理框架,目前已經(jīng)更新到 2.3 版本。不同于一般的消息中間件,Kafka 通過數(shù)據(jù)持久化和磁盤讀寫獲得了極高的吞吐量,并可以不依賴 Storm,SparkStreaming 的流處理平臺,自己進行實時的流處理。
Kakfa 的 Offset 機制是其最核心機制之一,由于 API 對于部分功能的實現(xiàn),我們有時并沒有手動去設置 Offset,那么 Kafka 到底有幾個 Offset 呢?
一、生產(chǎn)者 Offset
首先,我們先來看生產(chǎn)者的 offset,我們知道 Kafka 是通過生產(chǎn)者將消息發(fā)送給某一個 topic,消費者再消費這個 topic 的消息,當然可能有多個生產(chǎn)者,多個消費者,還可能有消費者組的概念,這個稍后在討論。
當生產(chǎn)者將消息發(fā)送給某一個 topic 時,要看有多少個分區(qū),因為 kafka 是通過分區(qū)機制實現(xiàn)分布式的。
圖 生產(chǎn)者 offset
通過此圖可以清晰的看到生產(chǎn)者的 offset 原理,不管是多少個生產(chǎn)者,還是我們規(guī)定了他們會寫入哪一個分區(qū),但只要他們寫入的時候,一定是每一個分區(qū)都有一個 offset,這個 offset 就是生產(chǎn)者的 offset,同時也是這個分區(qū)的最新最大的 offset。
有些時候我們在開發(fā)生產(chǎn)者代碼時并沒有指定某一個分區(qū)的 offset,可能是我們使用的單分區(qū),或者默認均勻的寫入多個分區(qū),這個工作 kafka 幫我們完成了。
二、消費者 Offset
再來看消費者端 offset,要稍微復雜一些。
圖 消費者 offset
這是某一個分區(qū)的 offset 情況,我們已經(jīng)知道生產(chǎn)者寫入的 offset 是最新最大的值也就是 12,而當 Consumer A 進行消費時,他從 0 開始消費,一直消費到了 9,他的 offset 就記錄在了 9,Consumer B 就紀錄在了 11。等下一次他們再來消費時,他們可以選擇接著上一次的位置消費,當然也可以選擇從頭消費,或者跳到最近的記錄并從“現(xiàn)在”開始消費。
這樣即使有多個分區(qū),消費者也能靈活使用。
圖 消費者組
消費者組的概念其實并不影響對 offset 的理解,上面的情況 Consumer A,Consumer B 如果是同組就不能同時消費一個分區(qū)的消息,不同組的消費者可以同時消費一個分區(qū)的消息。
還有一種 offset 的說法,就是 consumer 消費未提交時,本地是有另外一個 offset 的,這個 offset 不一定與集群中記錄的 offset 一致。
所以,kafka 每一個 topic 分區(qū)和生產(chǎn)者,消費者不同,是有多個 offset 的。
offset 是指某一個分區(qū)的偏移量。
topic partition offset 這三個唯一確定一條消息。
生產(chǎn)者的 offset 其實就是最新的 offset。
消費者的 offset 是他自己維護的,他可以選擇分區(qū)最開始,最新,也可以記住他消費到哪了。
消費者組是為了不同組的消費者可以同時消費一個分區(qū)的消息。
關(guān)于 Kafka 核心中的偏移量機制 Offset 是怎么樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。