您好,登錄后才能下訂單哦!
這篇文章主要講解了“Kafka水位是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Kafka水位是什么”吧!
kafka中用水位來描述,
一個分區中的可見數據的offset。
大概你需要知道這幾點:
hw(水位)你可以理解成是一個全局(所有副本最小offset)的offset,
針對的是一個分區
LEO代表著該副本的所有消息的最大offset,
針對的是一個副本,也就是每個副本都有LEO,并且不一樣。
其中所有副本中最小的LEO就是水位
水位
為了保障數據的一致性
當 Leader收到一條消息并寫入成功,
其LEO則和馬上 +1.
副本會定期去和Leader進行同步,
每同步一個消息,其自己的LEO相應+1,
而水位則是所有副本最小的LEO,
所以也會慢慢進行增加。
和ACK的關系
其實沒有必然的關系,
ACK是用來保證數據不丟失的,
而 hw 是用來保證客戶端消費的一致性的,
不過當ACK=-1,
因為會等到數據完全寫入到所有副本,
才能返回成功,
也就是說所有副本的LEO都 +1,
其水位必然也會 +1,
這個時候就可以避免數據丟失了。
否則則會存在數據丟失的風險
為什么ACK != -1 數據就可能丟失
比如一個分區,四個副本1,2,3,4:
1:LEO = 10(Leader)
2:LEO = 8
3:LEO = 7
4:LEO = 6
此時 hw = 6,
當1 號Leader掛掉了,
3號當選了新Leader,
則所有存活副本首先會將hw之外的所有數據清除,
然后從Leader同步水位之后的數據
比如2號副本:
先清除本身數據7,8,LEO變成6,
然后去Leader同步6之后的數據,
哪怕老Leader1號恢復了,6-10號數據還在,
也需要將宕機時候的hw之后的數據全部清除,
重新從Leader同步數據
感謝各位的閱讀,以上就是“Kafka水位是什么”的內容了,經過本文的學習后,相信大家對Kafka水位是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。