成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個能干掉90%候選人的Kafka面試連環炮

開發 架構
無論是為了面試還是實際項目使用,大家都值得看一下這篇文章對Kafka的acks參數的分析,以及背后的原理。

1、寫在前面

面試大廠時,一旦簡歷上寫了Kafka,幾乎必然會被問到一個問題:說說acks參數對消息持久化的影響?

這個acks參數在kafka的使用中,是非常核心以及關鍵的一個參數,決定了很多東西。

所以無論是為了面試還是實際項目使用,大家都值得看一下這篇文章對Kafka的acks參數的分析,以及背后的原理。


2、如何保證宕機的時候數據不丟失?

如果要想理解這個acks參數的含義,首先就得搞明白kafka的高可用架構原理。

比如下面的圖里就是表明了對于每一個Topic,我們都可以設置他包含幾個Partition,每個Partition負責存儲這個Topic一部分的數據。

然后Kafka的Broker集群中,每臺機器上都存儲了一些Partition,也就存放了Topic的一部分數據,這樣就實現了Topic的數據分布式存儲在一個Broker集群上。

但是有一個問題,萬一 一個Kafka Broker宕機了,此時上面存儲的數據不就丟失了嗎?

沒錯,這就是一個比較大的問題了,分布式系統的數據丟失問題,是他首先必須要解決的,一旦說任何一臺機器宕機,此時就會導致數據的丟失。

3、多副本冗余的高可用機制

所以如果大家去分析任何一個分布式系統的原理,比如說zookeeper、kafka、redis cluster、elasticsearch、hdfs,等等,其實他都有自己內部的一套多副本冗余的機制,多副本冗余幾乎是現在任何一個優秀的分布式系統都一般要具備的功能。

在kafka集群中,每個Partition都有多個副本,其中一個副本叫做leader,其他的副本叫做follower,如下圖。

如上圖所示,假設一個Topic拆分為了3個Partition,分別是Partition0,Partiton1,Partition2,此時每個Partition都有2個副本。

比如Partition0有一個副本是Leader,另外一個副本是Follower,Leader和Follower兩個副本是分布在不同機器上的。

這樣的多副本冗余機制,可以保證任何一臺機器掛掉,都不會導致數據徹底丟失,因為起碼還是有副本在別的機器上的。


4、多副本之間數據如何同步?

接著我們就來看看多個副本之間數據是如何同步的?其實任何一個Partition,只有Leader是對外提供讀寫服務的

也就是說,如果有一個客戶端往一個Partition寫入數據,此時一般就是寫入這個Partition的Leader副本。

然后Leader副本接收到數據之后,Follower副本會不停的給他發送請求嘗試去拉取最新的數據,拉取到自己本地后,寫入磁盤中。如下圖所示:

5、ISR到底指的是什么東西?

既然大家已經知道了Partiton的多副本同步數據的機制了,那么就可以來看看ISR是什么了。

ISR全稱是“In-Sync Replicas”,也就是保持同步的副本,他的含義就是,跟Leader始終保持同步的Follower有哪些。

大家可以想一下 ,如果說某個Follower所在的Broker因為JVM FullGC之類的問題,導致自己卡頓了,無法及時從Leader拉取同步數據,那么是不是會導致Follower的數據比Leader要落后很多?

所以這個時候,就意味著Follower已經跟Leader不再處于同步的關系了。但是只要Follower一直及時從Leader同步數據,就可以保證他們是處于同步的關系的。

所以每個Partition都有一個ISR,這個ISR里一定會有Leader自己,因為Leader肯定數據是最新的,然后就是那些跟Leader保持同步的Follower,也會在ISR里。

6、acks參數的含義

鋪墊了那么多的東西,最后終于可以進入主題來聊一下acks參數的含義了。

如果大家沒看明白前面的那些副本機制、同步機制、ISR機制,那么就無法充分的理解acks參數的含義,這個參數實際上決定了很多重要的東西。

首先這個acks參數,是在KafkaProducer,也就是生產者客戶端里設置的

也就是說,你往kafka寫數據的時候,就可以來設置這個acks參數。然后這個參數實際上有三種常見的值可以設置,分別是:0、1 和 all。

第一種選擇是把acks參數設置為0,意思就是我的KafkaProducer在客戶端,只要把消息發送出去,不管那條數據有沒有在哪怕Partition Leader上落到磁盤,我就不管他了,直接就認為這個消息發送成功了。

如果你采用這種設置的話,那么你必須注意的一點是,可能你發送出去的消息還在半路。結果呢,Partition Leader所在Broker就直接掛了,然后結果你的客戶端還認為消息發送成功了,此時就會導致這條消息就丟失了。

?第二種選擇是設置 acks = 1,意思就是說只要Partition Leader接收到消息而且寫入本地磁盤了,就認為成功了,不管他其他的Follower有沒有同步過去這條消息了。

這種設置其實是kafka默認的設置,大家請注意,劃重點!這是默認的設置

也就是說,默認情況下,你要是不管acks這個參數,只要Partition Leader寫成功就算成功?

但是這里有一個問題,萬一Partition Leader剛剛接收到消息,Follower還沒來得及同步過去,結果Leader所在的broker宕機了,此時也會導致這條消息丟失,因為人家客戶端已經認為發送成功了。

?最后一種情況,就是設置acks=all,這個意思就是說,Partition Leader接收到消息之后,還必須要求ISR列表里跟Leader保持同步的那些Follower都要把消息同步過去,才能認為這條消息是寫入成功了。

如果說Partition Leader剛接收到了消息,但是結果Follower沒有收到消息,此時Leader宕機了,那么客戶端會感知到這個消息沒發送成功,他會重試再次發送消息過去。

此時可能Partition 2的Follower變成Leader了,此時ISR列表里只有最新的這個Follower轉變成的Leader了,那么只要這個新的Leader接收消息就算成功了。?

7、最后的思考

acks=all 就可以代表數據一定不會丟失了嗎?

當然不是,如果你的Partition只有一個副本,也就是一個Leader,任何Follower都沒有,你認為acks=all有用嗎?

當然沒用了,因為ISR里就一個Leader,他接收完消息后宕機,也會導致數據丟失。

所以說,這個acks=all,必須跟ISR列表里至少有2個以上的副本配合使用,起碼是有一個Leader和一個Follower才可以。

這樣才能保證說寫一條數據過去,一定是2個以上的副本都收到了才算是成功,此時任何一個副本宕機,不會導致數據丟失。

所以希望大家把這篇文章好好理解一下,對大家出去面試,或者工作中用kafka都是很好的一個幫助。

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-04-28 15:53:03

Android MarAndroid

2019-06-10 10:29:23

Java面試技巧

2021-01-19 09:11:35

Zookeeper面試分布式

2013-12-02 09:49:15

微軟CEO貝茨硅谷

2011-03-17 16:54:38

AMDCEO

2022-11-24 06:33:43

表達式求值運算

2021-01-18 08:25:44

Zookeeper面試分布式

2021-06-10 10:07:27

網絡釣魚攻擊網絡安全

2009-02-17 14:44:40

360安全衛士周鴻祎IT

2021-12-14 07:40:07

多線程面試CPU

2024-11-29 08:11:27

2014-12-15 15:28:46

時代馬云庫克

2013-11-06 15:56:13

微軟CEO鮑爾默

2013-11-15 09:44:37

微軟CEO

2018-12-17 08:14:49

互聯網Java Kafka

2022-09-24 19:09:42

面試Kafka

2023-03-24 09:53:30

2013-11-15 11:20:55

微軟微軟CEO微軟COO

2019-04-16 13:30:05

表達式求值數據結構算法

2012-10-18 15:10:51

前端工程師面試題WEB開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂视频一区 | av网站在线播放 | 久久久久国产精品 | 日韩国产中文字幕 | a久久| 成人性视频免费网站 | 亚洲天天| 日本在线观看网址 | 天天躁日日躁aaaa视频 | 国产中文字幕在线观看 | 久久99国产精一区二区三区 | 乳色吐息在线观看 | 欧美在线国产精品 | 久久在视频 | 久久久久国产精品www | 一区二区高清 | 一区二区三区在线免费看 | 国产福利91精品 | 日韩色视频 | 国产一区二区在线视频 | 在线观看深夜视频 | 免费黄色的视频 | 国产精品日日摸夜夜添夜夜av | 久久久精品一区二区三区 | 久久精品国产一区二区电影 | 国产一级毛片视频 | 高清av在线 | 精品国产乱码久久久久久闺蜜 | 国产精品久久二区 | 精品欧美一区二区在线观看视频 | 亚洲一区在线日韩在线深爱 | 91免费版在线 | 久久精品色欧美aⅴ一区二区 | 久久久久国产 | 免费观看国产视频在线 | 亚洲精品成人免费 | 午夜99| 久久99国产精一区二区三区 | wwwxxx日本在线观看 | 成人一区二区三区在线观看 | 欧美激情综合 |