Kafka系列5-Kafka 常見面試題 一. 常見面試題 參考:

一. 常見面試題

1.1 Kafka 中的 ISR(InSyncRepli)、 OSR(OutSyncRepli)、 AR(AllRepli)代表什麼?

ISR:速率和leader相差低於10s的follower的集合

OSR:速率和leader相差大於10s的follwer

AR:所有分區的follower

1.2 Kafka 中的 HW、 LEO 等分別代表什麼?

HW:High Water高水位,根據同一分區中最低的LEO決定(Log End Offset)

LEO:每個分區最大的Offset

1.3 Kafka 中是怎麼體現消息順序性的?

在每個分區內,每條消息都有offset,所以消息在同一分區內有序,無法做到全局有序性

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

分區器Partitioner用來對分區進行處理的,即消息發送到哪一個分區的問題。序列化器,這個是對數據進行序列化和反序列化的工具。攔截器,即對於消息發送進行一個提前處理和收尾處理的類Interceptor,處理順利首先通過攔截器=>序列化器=>分區器

1.5 Kafka 生產者客戶端的整體結構是什麼樣子的?使用了幾個線程來處理?分別是什麼?

使用兩個線程:main和sender 線程,main線程會一次經過攔截器、序列化器、分區器將數據發送到RecoreAccumulator線程共享變量,再由sender線程從共享變量中拉取數據發送到kafka broker

batch.size達到此規模消息才發送,linger.ms未達到規模,等待當前時長就發送數據。

1.6 消費組中的消費者個數如果超過 topic 的分區,那麼就會有消費者消費不到數據”這句 話是否正確?

這句話是對的,超過分區個數的消費者不會在接收數據,主要原因是一個分區的消息只能夠被一個消費者組中的一個消費者消費。

1.7 消費者提交消費位移時提交的是當前消費到的最新消息的 offset 還是 offset+1?

生產者發送數據的offset是從0開始的,消費者消費的數據的offset是從1開始,故最新消息是offset+1

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

先消費後提交offset,如果消費完宕機了,則會造成重複消費

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

先提交offset,還沒消費就宕機了,則會造成漏消費

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

會在 zookeeper 中的/brokers/topics 節點下創建一個新的 topic 節點,如:/brokers/topics/first
觸發 Controller 的監聽程序
kafka Controller 負責 topic 的創建工作,並更新 metadata cache

1.11 topic 的分區數可不可以增加?如果可以怎麼增加?如果不可以,那又是爲什麼?

可以增加,修改分區個數--alter可以修改分區個數

1.12 topic 的分區數可不可以減少?如果可以怎麼減少?如果不可以,那又是爲什麼?

不可以減少,減少了分區之後,之前的分區中的數據不好處理

1.13 Kafka 有內部的 topic 嗎?如果有是什麼?有什麼所用?

有,__consumer_offsets主要用來在0.9版本以後保存消費者消費的offset

1.14 Kafka 分區分配的概念?

Kafka分區對於Kafka集羣來說,分區可以做到負載均衡,對於消費者來說分區可以提高併發度,提高讀取效率

1.15 簡述 Kafka 的日誌目錄結構?

每一個分區對應着一個文件夾,命名爲topic-0/topic-1…,每個文件夾內有.index和.log文件。

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

offset表示當前消息的編號,首先可以通過二分法定位當前消息屬於哪個.index文件中,隨後採用seek定位的方法查找到當前offset在.index中的位置,此時可以拿到初始的偏移量。通過初始的偏移量再通過seek定位到.log中的消息即可找到。

1.17 聊一聊 Kafka Controller 的作用?

Kafka集羣中有一個broker會被選舉爲Controller,負責管理集羣broker的上下線、所有topic的分區副本分配和leader的選舉等工作。Controller的工作管理是依賴於zookeeper的。

1.18 Kafka 中有那些地方需要選舉?這些地方的選舉策略又有哪些?

在ISR中需要選舉出Leader,選擇策略爲先到先得。在分區中需要選舉,需要選舉出Leader和follower。

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

失效副本爲速率比leader相差大於10s的follower,ISR會將這些失效的follower踢出,等速率接近leader的10s內,會重新加入ISR

1.20 Kafka 的哪些設計讓它有如此高的性能?

  1. Kafka天生的分佈式架構
  2. 對log文件進行了分segment,並對segment建立了索引
  3. 對於單節點使用了順序讀寫,順序讀寫是指的文件的順序追加,減少了磁盤尋址的開銷,相比隨機寫速度提升很多
  4. 使用了零拷貝技術,不需要切換到用戶態,在內核態即可完成讀寫操作,且數據的拷貝次數也更少。

參考:

  1. https://blog.csdn.net/cao1315020626/article/details/112590786
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章