整理kafka常見面試題

聽海的石頭發表於2020-11-26

1、什麼是kafka

Kafka是分散式釋出-訂閱訊息系統,它最初是由LinkedIn公司開發的,之後成為Apache專案的一部分,Kafka是一個分散式,可劃分的,冗餘備份的永續性的日誌服務,它主要用於處理流式資料。

2、kafka中的zookeeper起到什麼作用,可以不用zookeeper麼

zookeeper 是一個分散式的協調元件,早期版本的kafka用zk做meta資訊儲存,consumer的消費狀態,group的管理以及 offset的值。考慮到zk本身的一些因素以及整個架構較大概率存在單點問題,新版本中逐漸弱化了zookeeper的作用。新的consumer使用了kafka內部的group coordination協議,也減少了對zookeeper的依賴,但是broker依然依賴於ZK,zookeeper 在kafka中還用來選舉controller 和 檢測broker是否存活等等。

3、Kafka中是怎麼體現訊息順序性的?

kafka每個partition中的訊息在寫入時都是有序的,消費時,每個partition只能被每一個group中的一個消費者消費,保證了消費時也是有序的。整個topic不保證有序。如果為了保證topic整個有序,那麼將partition調整為1.

4、kafka中的broker是幹什麼的

broker 是訊息的代理,Producers往Brokers裡面的指定Topic中寫訊息,Consumers從Brokers裡面拉取指定Topic的訊息,然後進行業務處理,broker在中間起到一個代理儲存訊息的中轉站。

5、kafka follower如何與leader同步資料

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

6、Kafka訊息是採用Pull模式,還是Push模式?

Kafka 最初考慮的問題是,customer 應該從 brokes 拉取訊息還是 brokers 將訊息推送到consumer,也就是 pull 還 push。
在這方面,Kafka 遵循了一種大部分訊息系統共同的傳統的設計:producer 將訊息推送到 broker,consumer 從 broker 拉取訊息一些訊息系統比如 Scribe 和 Apache Flume 採用了 push 模式,將訊息推送到下游的consumer。
這樣做有好處也有壞處:由 broker 決定訊息推送的速率,對於不同消費速率的consumer 就不太好處理了。訊息系統都致力於讓 consumer 以最大的速率最快速的消費訊息,但不幸的是,push 模式下,當 broker 推送的速率遠大於 consumer 消費的速率時,consumer 恐怕就要崩潰了。最終 Kafka 還是選取了傳統的 pull 模式。
Pull 模式的另外一個好處是 consumer 可以自主決定是否批量的從 broker 拉取資料。
Pull 模式下,consumer 就可以根據自己的消費能力去決定這些策略Pull 有個缺點是,如果 broker 沒有可供消費的訊息,將導致 consumer 不斷在迴圈中輪詢,直到新訊息到 t 達。為了避免這點,Kafka 有個引數可以讓 consumer 阻塞知道新訊息到達。

7、Kafka的ack機制

request.required.acks 有三個值 0 1 -1
0:生產者不會等待 broker 的 ack,這個延遲最低但是儲存的保證最弱當 server 掛掉的時候
就會丟資料
1:服務端會等待 ack 值 leader 副本確認接收到訊息後傳送 ack 但是如果 leader 掛掉後他
不確保是否複製完成新 leader 也會導致資料丟失
-1:同樣在 1 的基礎上 服務端會等所有的 follower 的副本受到資料後才會受到 leader 發出
的 ack,這樣資料不會丟失

8、Kafka與傳統訊息系統之間有三個關鍵區別

(1)Kafka 持久化日誌,這些日誌可以被重複讀取和無限期保留
(2)Kafka是一個分散式系統:它以叢集的方式執行,可以靈活伸縮,在內部通過複製資料提升容錯能力和高可用性
(3)Kafka 支援實時的流式處理

9、請說明Kafka相對傳統技術有什麼優勢?

快速:單一的Kafka代理可以處理成千上萬的客戶端,每秒處理數兆位元組的讀寫操作。
可伸縮:在一組機器上對資料進行分割槽和簡化,以支援更大的資料
持久:訊息是永續性的,並在叢集中進行復制,以防止資料丟失。
設計:它提供了容錯保證和永續性

10、消費者負載均衡策略

一個消費者組中的一個分片對應一個消費者成員,他能保證每個消費者成員都能訪問,如果組中成員太多會有空閒的成員

相關文章