1. 程式人生 > >Kafka到底有幾個Offset?——Kafka核心之偏移量機制

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等相關技術博文,歡迎關注實時流式計算

相關推薦

Kafka到底Offset?——Kafka核心偏移機制

​ Kafka是由LinkIn開源的實時資料處理框架,目前已經更新到2.3版本。不同於一般的訊息中介軟體,Kafka通過資料持久化和磁碟讀寫獲得了極高的吞吐量,並可以不依賴Storm,SparkStreaming的流處理平臺,自己進行實時的流處理。 ​ Kakfa的Offset機制是其最核心機制之一,由於

kafka中的常見問題

#kafka中的幾個常見問題 V1版 1,每個topic的分割槽中有多個segment,一個分割槽會被分成相同大小資料數量不等的segment,資料的生命週期就是指的是segment的生命週期 2,資料的儲存機制: 首先是Broker接受到資料,將資料放到作業系統的快取裡,(page

kafka中的基本概念

Kafka架構是由producer(訊息生產者)、consumer(訊息消費者)、borker(kafka叢集的server,負責處理訊息讀、寫請求,儲存訊息,在kafka cluster這一層這裡,其實裡面是有很多個broker)、topic(訊息佇列/分類相當於佇列,裡面有生產者和消費者模型)、

PHP執行系統命令的常用的函數

exe 自動 文件操作 nal 外部命令 中間 ring 打開 lcm PHP執行系統命令的有幾個常用的函數,如有:system函數、exec函數、popen函數,passthru,shell_exec函數他們都可以執行系統命令,不過前提時必須系統給了權限了哦。 syste

程序員專屬奢侈品,你

spa center nbsp bsp 裝逼 雙飛燕 耳機 代碼 江蘇 現在,放松放松 讓我們一起看看屬於程序員的奢侈品 (看完了就更“開心”了) 好,不說廢話了 咱們先看幹貨(總有一個你買不起的~) 看完你一定會說 原來我代碼寫不好 是因為就差一個***啊~ No.1 完

自從勒索病毒到來之後端口比較敏感,我來教你如何手動關閉外部連接到本地端口,防範中招!

電腦維護Windows 7與Windows 10方法一樣:控制面板---系統和安全---Windows 防火墻---高級設置---入站規則---新建規則---選擇“端口”後下一步---選擇“特定本地端口”,輸入 135,137,138,139,445 端口號,中間用英文逗號隔開即可---下一步選擇“阻止連

C#版本?C#和.net版本什麽區別?C#和.net對應版本?

3.5 vs2012 初始化 重載 中新 對象初始化 初始 擴展 windows C#1.0 1.1-->VS2003-->.NET 1.0 1.1-->委托 事件 屬性 AttributeC#2.0-->VS2005-->.NET 2.0--

C#根據用戶輸入字符串,輸出大寫字母,小寫字母

串接 輸出大寫字母 main void 一個 adl ring static char s static void Main(string[] args) { // 根據用戶輸入字符串,輸出大寫字母有幾個,小寫字母有幾個。 Conso

這20Docker Command,是你會的?

運維 docker 容器 在這之前呢,也寫過兩篇關於Docker基礎入門類的文章 Docker容器技術入門(一) Docker容器技術入門(二) 很多人都感覺這文章這麽簡單、這麽基礎,可是別忘記了“萬丈高樓平地起”,如果少了這個平地址,你這高樓估計也起不了。所以,基礎是學習任何一門技術或者一個技術

9大行為導致Java程序員薪資過低, 你

java 架構師 互聯網 IT 程序員 Java程序員薪水有高有低,有的人一個月可能拿30K、50K,有的人可能只有2K、3K。同樣有五年工作經驗的Java程序員,可能一個人每月拿20K,一個拿5K。是什麽因素導致了這種差異?本文整理導致Java程序員薪水低的9大行為,避開這些大坑,你就離

HBASE列族不能太多的真相 (一個table列族就 Store)

gii 大小 mil 更多 觸發 flush adc 同事 就是 今天和同事聊到這個問題,發現者自己理解上有點錯誤。借此機會記錄下 HRegionServer內部管理了一系列HRegion對象,每個HRegion對 應了table中的一個region,HRegion中由多

控制能同時線程並發Semaphore

ava class exception rand 單元 當前 math pri 時有 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ja

PAT 1040 PAT

result har ret blank return http pri lan main https://pintia.cn/problem-sets/994805260223102976/problems/994805282389999616 字符串 APPAPT

種統計一個二進制數內1的方法

是不是 aaa emp ++ iostream ace 不能 位運算 fff //幾種統計一個二進制數內有幾個1的方法//方法一: int f1(int temp) { int num = 0; while(temp) { int t =

1040 PAT (25 分)

字串 APPAPT 中包含了兩個單詞 PAT,其中第一個 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二個 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。 現給定字串,問一共可以形成多少個 PAT? 輸入格式: 輸入只有一行,包含一個字串,長度

mySql中,查詢一串字串裡'abc'

mySql中,查詢一串字串裡有幾個’abc’ 我在實習時候碰到過一個這樣的需求,在表裡有一串12位的字串,全是數字0和1,如下: 000011111111 表示這個人一年中,前四個月沒有繳費,後八個月繳費了。我的需求是想知道這個人一年總共繳費多少個月。 在寫sql語句時,有一個巧方法,利

[leetcode]694. Number of Distinct Islands你究竟異小島?

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizon

1040. PAT(25)

字串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。 現給定字串,問一共可以形成多少個PAT? 輸入格式: 輸入只有一行,包含一個字串,長度不超過105,只包含P、A、T三