天天看點

Kafka_面試題

Kafka面試題

    • 1. Kafka中的ISR、AR又代表什麼?
    • 2. Kafka中的HW、LEO等分别代表什麼?
    • 3. Kafka中是怎麼展現消息順序性的?
    • 4. Kafka中的分區器、序列化器、攔截器是否了解?它們之間的處理順序是什麼?
    • 5. Kafka生産者用戶端的整體結構是什麼樣子的?使用了幾個線程來處理?分别是什麼?
    • 6. 消費組中的消費者個數如果超過topic的分區,那麼就會有消費者消費不到資料”這句話是否正确?
    • 7. 消費者送出消費位移時送出的是目前消費到的最新消息的offset還是offset+1?
    • 8. 有哪些情形會造成重複消費?
    • 9. 那些情景會造成消息漏消費?
    • 10. 當你使用kafka-topics.sh建立(删除)了一個topic之後,Kafka背後會執行什麼邏輯?
    • 11. topic的分區數可不可以增加減少?為什麼?
    • 12. kafka producer如何優化打入速度
    • 13. Kafka有内部的topic嗎?如果有是什麼?有什麼所用?
    • 14. Kafka分區配置設定的概念?
    • 15. 簡述Kafka的日志目錄結構?
    • 16. 如果我指定了一個offset,Kafka Controller怎麼查找到對應的消息?
    • 17. 聊一聊Kafka Controller的作用?
    • 18. Kafka中有那些地方需要選舉?這些地方的選舉政策又有哪些?
    • 19. 失效副本是指什麼?有那些應對措施?
    • 20. Kafka的那些設計讓它有如此高的性能?

1. Kafka中的ISR、AR又代表什麼?

AR:Assigned Replicas 所有副本,包括主

ISR:In-Sync Replicas 副本同步隊列 (ISR由leader維護,follower從leader同步資料有一些延遲)

(包括延遲時間replica.lag.time.max.ms和延遲條數replica.lag.max.messages兩個次元)

目前最新的版本0.10.x中隻支援replica.lag.time.max.ms這個次元),任意一個超過門檻值都會把follower剔除出ISR,存入OSR(Outof-Sync Replicas)清單,新加入的follower也會先存放在OSR中。

AR=ISR+OSR。

2. Kafka中的HW、LEO等分别代表什麼?

LEO:(Log End Offset)每個副本的最後條消息的offset

HW:(High Watermark)俗稱高水位,一個分區中所有副本最小的offset

3. Kafka中是怎麼展現消息順序性的?

Kafka隻能保證分區内消息順序有序,無法保證全局有序

實際業務中:

1)一個 topic,一個 partition,一個 consumer,内部單線程消費,單線程吞吐量太低,一般不會用這個。

2)寫 N 個記憶體 queue,具有相同 key 的資料都到同一個記憶體 queue;然後對于 N 個線程,每個線程分别消費一個記憶體 queue 即可,這樣就能保證順序性。

4. Kafka中的分區器、序列化器、攔截器是否了解?它們之間的處理順序是什麼?

攔截器(onSend onAcknowledgement)->序列化器->分區器

5. Kafka生産者用戶端的整體結構是什麼樣子的?使用了幾個線程來處理?分别是什麼?

1個主線程,一個sender線程。主線程有攔截器(onSend onAcknowledgement)->序列化器->分區器,sender線程負責堆積(或到指定時間)發送資料到對應分區

6. 消費組中的消費者個數如果超過topic的分區,那麼就會有消費者消費不到資料”這句話是否正确?

消費者個數如果超過topic的分區,那麼就會有消費者消費不到資料,一個分區隻能被一個消費者消費

7. 消費者送出消費位移時送出的是目前消費到的最新消息的offset還是offset+1?

offset+1,檔案也是這樣命名的

8. 有哪些情形會造成重複消費?

1)從生産者端:

ack 設定為 -1 ,Leader收到資料follower同步資料後 ,brocker準備傳回ack的時候挂掉了,新選出的Leader則會出現重複發送的情況

2)從消費者端:

先消費後送出,消費完成以後offset沒有送出成功,下次消費時則會導緻重複

9. 那些情景會造成消息漏消費?

1)從生産者端:

ack 設定為 0或者1時

–為0時,無狀态傳回,不知道是否收到

–為1時,隻有Leader收到就傳回ack,此時Leader挂了,副本尚未同步,則會漏消費。

2)從消費者端:

先送出後消費時

10. 當你使用kafka-topics.sh建立(删除)了一個topic之後,Kafka背後會執行什麼邏輯?

1、會在zookeeper中的/brokers/topics節點下建立一個新的topic節點,如:/brokers/topics/first

2、觸發Controller的監聽程式

3、kafka Controller 負責topic的建立工作,并更新metadata cache

11. topic的分區數可不可以增加減少?為什麼?

可以增加,不能減少。

12. kafka producer如何優化打入速度

增加線程

提高 batch.size

增加更多 producer 執行個體

增加 partition 數

設定 acks=-1 時,如果延遲增大:可以增大 num.replica.fetchers(follower 同步資料的線程數)來調解;

跨資料中心的傳輸:增加 socket 緩沖區設定以及 OS tcp 緩沖區設定。

13. Kafka有内部的topic嗎?如果有是什麼?有什麼所用?

__consumer_offsets:作用是儲存 Kafka 消費者的位移資訊

14. Kafka分區配置設定的概念?

1、range

2、Round-robin

15. 簡述Kafka的日志目錄結構?

一個Topic有多個partition,一個partition對應一個目錄,目錄命名 ,topic-分區id。

下面分多個segment目錄,命名是以topic名稱和開始消息的偏移量來命名的,目錄主要有兩類檔案log和index檔案。

16. 如果我指定了一個offset,Kafka Controller怎麼查找到對應的消息?

通過 offset找到對應的segment目錄,目錄下找到index檔案,再去log檔案中擷取消息

17. 聊一聊Kafka Controller的作用?

Kafka叢集的管理者,依賴zookeeper

在Kafka早期版本,對于分區和副本的狀态的管理依賴于zookeeper的Watcher和隊列:每一個broker都會在zookeeper注冊Watcher,是以zookeeper就會出現大量的Watcher, 如果當機的broker上的partition很多比較多,會造成多個Watcher觸發,造成叢集内大規模調整;每一個replica都要去再次zookeeper上注冊螢幕,當叢集規模很大的時候,zookeeper負擔很重。這種設計很容易出現腦裂和羊群效應以及zookeeper叢集過載。

新版本該變了這種設計,使用KafkaController,隻有KafkaController

Leader會向zookeeper上注冊Watcher,其他broker幾乎不用監聽zookeeper的狀态變化

Kafka叢集中多個broker,有一個會被選舉為controller leader,負責管理整個叢集中分區和副本的狀态,比如partition的leader 副本故障,由controller 負責為該partition重新選舉新的leader 副本;當檢測到ISR清單發生變化,有controller通知叢集中所有broker更新其MetadataCache資訊;或者增加某個topic分區的時候也會由controller管理分區的重新配置設定工作

當broker啟動的時候,都會建立KafkaController對象,但是叢集中隻能有一個leader對外提供服務,這些每個節點上的KafkaController會在指定的zookeeper路徑下建立臨時節點,隻有第一個成功建立的節點的KafkaController才可以成為leader,其餘的都是follower。當leader故障後,所有的follower會收到通知,再次競争在該路徑下建立節點進而選舉新的leader(先到先得)

18. Kafka中有那些地方需要選舉?這些地方的選舉政策又有哪些?

1、KafkaController選舉的時候,先到先得

2、分區的副本選Leader的時候,從ISR中擷取

19. 失效副本是指什麼?有那些應對措施?

踢出ISR的那些OSR。從HW截斷,然後同步Leader

20. Kafka的那些設計讓它有如此高的性能?

1、分區

2、順序

3、零拷貝