每個topic可以劃分多個分割槽(每個topic至少有乙個分割槽),同一topic下的不同分割槽包含的訊息是不同的。每個訊息在被新增到分割槽時,都會被分配乙個offset(稱之為偏移量),它是訊息在此分割槽中的唯一編號,kafka通過offset保證訊息在分區內的順序,offset的順序不跨分割槽,即kafka只保證在同乙個分區內的訊息是有序的; 對於應用層的消費來說,每次消費乙個訊息並且提交以後,會儲存當前消費到的最近的乙個offset。那麼offset儲存在**?
在kafka中,提供了乙個consumer_offsets_* 的乙個topic,把offset資訊寫入到這個topic中。consumer_offsets——按儲存了每個consumer group某一時刻提交的offset資訊。
__consumer_offsets 預設有50個分割槽。
計算公式
math.abs(「groupid」.hashcode())%groupmetadatatopicpartitioncount ; 由於預設情況下
groupmetadatatopicpartitioncount有50個分割槽,計算得到的結果為:35, 意味著當前的
consumer_group的位移資訊儲存在__consumer_offsets的第35個分割槽
執行如下命令,可以檢視當前consumer_goup中的offset位移提交的資訊
kafka-console-consumer.sh
--topic
__consumer_offsets
--partition
15--
bootstrap-server
192.168
.13.102
:9092
,192.168
.13.103
:9092
,192.168
.13.104
:9092
--formatter
'kafka
.coordinator
.group
.groupmetadatamanager$offsetsmessageformatter
從輸出結果中,我們就可以看到test這個topic的offset的位移日 kafka如何保證資料的順序消費
一公尺多的李同學 最後發布於2019 05 22 20 49 58 閱讀數 5619 收藏 14 展開在對kafka的理解中,常常會被問及到kafka如何保證資料的順序消費 kafka的資料重複消費怎麼處理 如何保證kafka中資料不丟失?今天先說說資料的順序消費問題。關於順序消費的幾點說明 kaf...
kafka是如何保證訊息不被重複消費的
一 kafka自帶的消費機制 kafka有個offset的概念,當每個訊息被寫進去後,都有乙個offset,代表他的序號,然後consumer消費該資料之後,隔一段時間,會把自己消費過的訊息的offset提交一下,代表我已經消費過了。下次我要是重啟,就會繼續從上次消費到的offset來繼續消費。但是...
高吞吐的kafka如何保證訊息消費的有序性
producer端傳送的message必須指定是傳送到哪個topic,但是不需要指定topic下的哪個partition,因為kafka會把收到的message進行load balance,均勻的分布在這個topic下的不同的partition上 hash message broker數量 同組有多...