日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享一波Kafka面试题答案

發(fā)布時(shí)間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享一波Kafka面试题答案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前已經(jīng)分享了好幾篇關(guān)于 Kafka 的文章,從基本概念和使用到高可用機(jī)制解析到最佳實(shí)踐。今天分享幾個(gè)?Kafka?的面試題,這些面試題是大數(shù)據(jù)工程師在面試中經(jīng)常問到的一些問題,在此整理一下,分享給大家。
如果你是 Java 開發(fā)工程師,也可以看看這份面試題目:假如我是面試官,我會這樣虐你

1 什么是kafka

Kafka是分布式發(fā)布-訂閱消息系統(tǒng),它最初是由LinkedIn公司開發(fā)的,之后成為Apache項(xiàng)目的一部分,Kafka是一個(gè)分布式,可劃分的,冗余備份的持久性的日志服務(wù),它主要用于處理流式數(shù)據(jù)。

2 為什么要使用 kafka,為什么要使用消息隊(duì)列

緩沖和削峰:上游數(shù)據(jù)時(shí)有突發(fā)流量,下游可能扛不住,或者下游沒有足夠多的機(jī)器來保證冗余,kafka在中間可以起到一個(gè)緩沖的作用,把消息暫存在kafka中,下游服務(wù)就可以按照自己的節(jié)奏進(jìn)行慢慢處理。

解耦和擴(kuò)展性:項(xiàng)目開始的時(shí)候,并不能確定具體需求。消息隊(duì)列可以作為一個(gè)接口層,解耦重要的業(yè)務(wù)流程。只需要遵守約定,針對數(shù)據(jù)編程即可獲取擴(kuò)展能力。

冗余:可以采用一對多的方式,一個(gè)生產(chǎn)者發(fā)布消息,可以被多個(gè)訂閱topic的服務(wù)消費(fèi)到,供多個(gè)毫無關(guān)聯(lián)的業(yè)務(wù)使用。

健壯性:消息隊(duì)列可以堆積請求,所以消費(fèi)端業(yè)務(wù)即使短時(shí)間死掉,也不會影響主要業(yè)務(wù)的正常進(jìn)行。

異步通信:很多時(shí)候,用戶不想也不需要立即處理消息。消息隊(duì)列提供了異步處理機(jī)制,允許用戶把一個(gè)消息放入隊(duì)列,但并不立即處理它。想向隊(duì)列中放入多少消息就放多少,然后在需要的時(shí)候再去處理它們。

3 kafka中的broker 是干什么的

broker 是消息的代理,Producers往Brokers里面的指定Topic中寫消息,Consumers從Brokers里面拉取指定Topic的消息,然后進(jìn)行業(yè)務(wù)處理,broker在中間起到一個(gè)代理保存消息的中轉(zhuǎn)站。

4 kafka中的 zookeeper 起到什么作用,可以不用zookeeper么

zookeeper 是一個(gè)分布式的協(xié)調(diào)組件,早期版本的kafka用zk做meta信息存儲,consumer的消費(fèi)狀態(tài),group的管理以及 offset的值。考慮到zk本身的一些因素以及整個(gè)架構(gòu)較大概率存在單點(diǎn)問題,新版本中逐漸弱化了zookeeper的作用。新的consumer使用了kafka內(nèi)部的group coordination協(xié)議,也減少了對zookeeper的依賴,

但是broker依然依賴于ZK,zookeeper 在kafka中還用來選舉controller 和 檢測broker是否存活等等。

5 kafka follower如何與leader同步數(shù)據(jù)

Kafka的復(fù)制機(jī)制既不是完全的同步復(fù)制,也不是單純的異步復(fù)制。完全同步復(fù)制要求All Alive Follower都復(fù)制完,這條消息才會被認(rèn)為commit,這種復(fù)制方式極大的影響了吞吐率。而異步復(fù)制方式下,Follower異步的從Leader復(fù)制數(shù)據(jù),數(shù)據(jù)只要被Leader寫入log就被認(rèn)為已經(jīng)commit,這種情況下,如果leader掛掉,會丟失數(shù)據(jù),kafka使用ISR的方式很好的均衡了確保數(shù)據(jù)不丟失以及吞吐率。Follower可以批量的從Leader復(fù)制數(shù)據(jù),而且Leader充分利用磁盤順序讀以及send file(zero copy)機(jī)制,這樣極大的提高復(fù)制性能,內(nèi)部批量寫磁盤,大幅減少了Follower與Leader的消息量差。

6??什么情況下一個(gè) broker 會從 isr中踢出去

leader會維護(hù)一個(gè)與其基本保持同步的Replica列表,該列表稱為ISR(in-sync Replica),每個(gè)Partition都會有一個(gè)ISR,而且是由leader動(dòng)態(tài)維護(hù) ,如果一個(gè)follower比一個(gè)leader落后太多,或者超過一定時(shí)間未發(fā)起數(shù)據(jù)復(fù)制請求,則leader將其重ISR中移除 ,詳細(xì)參考?kafka的高可用機(jī)制

7 kafka 為什么那么快

  • Cache?Filesystem Cache PageCache緩存

  • 順序?qū)?由于現(xiàn)代的操作系統(tǒng)提供了預(yù)讀和寫技術(shù),磁盤的順序?qū)懘蠖鄶?shù)情況下比隨機(jī)寫內(nèi)存還要快。

  • Zero-copy?零拷?技術(shù)減少拷貝次數(shù)

  • Batching of Messages?批量量處理。合并小的請求,然后以流的方式進(jìn)行交互,直頂網(wǎng)絡(luò)上限。

  • Pull 拉模式?使用拉模式進(jìn)行消息的獲取消費(fèi),與消費(fèi)端處理能力相符。

8??kafka producer如何優(yōu)化打入速度

  • 增加線程

  • 提高 batch.size

  • 增加更多 producer 實(shí)例

  • 增加 partition 數(shù)

  • 設(shè)置 acks=-1 時(shí),如果延遲增大:可以增大 num.replica.fetchers(follower 同步數(shù)據(jù)的線程數(shù))來調(diào)解;

  • 跨數(shù)據(jù)中心的傳輸:增加 socket 緩沖區(qū)設(shè)置以及 OS tcp 緩沖區(qū)設(shè)置。

優(yōu)化方面的參考?kafka最佳實(shí)踐

9 ?kafka producer 打數(shù)據(jù),ack ?為 0, 1, -1 的時(shí)候代表啥, 設(shè)置 -1 的時(shí)候,什么情況下,leader 會認(rèn)為一條消息 commit了

1(默認(rèn))??數(shù)據(jù)發(fā)送到Kafka后,經(jīng)過leader成功接收消息的的確認(rèn),就算是發(fā)送成功了。在這種情況下,如果leader宕機(jī)了,則會丟失數(shù)據(jù)。

0?生產(chǎn)者將數(shù)據(jù)發(fā)送出去就不管了,不去等待任何返回。這種情況下數(shù)據(jù)傳輸效率最高,但是數(shù)據(jù)可靠性確是最低的。

-1?producer需要等待ISR中的所有follower都確認(rèn)接收到數(shù)據(jù)后才算一次發(fā)送完成,可靠性最高。

當(dāng)ISR中所有Replica都向Leader發(fā)送ACK時(shí),leader才commit,這時(shí)候producer才能認(rèn)為一個(gè)請求中的消息都commit了。

10 ?kafka ?unclean 配置代表啥,會對 spark streaming 消費(fèi)有什么影響

unclean.leader.election.enable 為true的話,意味著非ISR集合的broker 也可以參與選舉,這樣有可能就會丟數(shù)據(jù),spark streaming在消費(fèi)過程中拿到的 end offset 會突然變小,導(dǎo)致 spark streaming job掛掉。如果unclean.leader.election.enable參數(shù)設(shè)置為true,就有可能發(fā)生數(shù)據(jù)丟失和數(shù)據(jù)不一致的情況,Kafka的可靠性就會降低;而如果unclean.leader.election.enable參數(shù)設(shè)置為false,Kafka的可用性就會降低。

11 如果leader crash時(shí),ISR為空怎么辦

kafka在Broker端提供了一個(gè)配置參數(shù):unclean.leader.election,這個(gè)參數(shù)有兩個(gè)值:
true(默認(rèn)):允許不同步副本成為leader,由于不同步副本的消息較為滯后,此時(shí)成為leader,可能會出現(xiàn)消息不一致的情況。
false:不允許不同步副本成為leader,此時(shí)如果發(fā)生ISR列表為空,會一直等待舊leader恢復(fù),降低了可用性。

12? kafka的message格式是什么樣的

一個(gè)Kafka的Message由一個(gè)固定長度的header和一個(gè)變長的消息體body組成

header部分由一個(gè)字節(jié)的magic(文件格式)和四個(gè)字節(jié)的CRC32(用于判斷body消息體是否正常)構(gòu)成。

當(dāng)magic的值為1的時(shí)候,會在magic和crc32之間多一個(gè)字節(jié)的數(shù)據(jù):attributes(保存一些相關(guān)屬性,

比如是否壓縮、壓縮格式等等);如果magic的值為0,那么不存在attributes屬性

body是由N個(gè)字節(jié)構(gòu)成的一個(gè)消息體,包含了具體的key/value消息

13? kafka中consumer group 是什么概念

同樣是邏輯上的概念,是Kafka實(shí)現(xiàn)單播和廣播兩種消息模型的手段。同一個(gè)topic的數(shù)據(jù),會廣播給不同的group;同一個(gè)group中的worker,只有一個(gè)worker能拿到這個(gè)數(shù)據(jù)。換句話說,對于同一個(gè)topic,每個(gè)group都可以拿到同樣的所有數(shù)據(jù),但是數(shù)據(jù)進(jìn)入group后只能被其中的一個(gè)worker消費(fèi)。group內(nèi)的worker可以使用多線程或多進(jìn)程來實(shí)現(xiàn),也可以將進(jìn)程分散在多臺機(jī)器上,worker的數(shù)量通常不超過partition的數(shù)量,且二者最好保持整數(shù)倍關(guān)系,因?yàn)镵afka在設(shè)計(jì)時(shí)假定了一個(gè)partition只能被一個(gè)worker消費(fèi)(同一group內(nèi))。

總結(jié)

以上是生活随笔為你收集整理的分享一波Kafka面试题答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。