整理kafka常見面試題
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、消費者負載均衡策略
一個消費者組中的一個分片對應一個消費者成員,他能保證每個消費者成員都能訪問,如果組中成員太多會有空閒的成員
相關文章
- 【面試】面試常見問題整理面試
- HashMap常見面試題整理HashMap面試題
- Vue常見面試題整理Vue面試題
- 那些常見的面試題整理面試題
- 常見12個python面試題整理Python面試題
- C++常見的面試題目整理C++面試題
- 2019年幾道常見js面試題整理JS面試題
- Spring 常見的一些面試題整理Spring面試題
- 常見面試題整理,金三銀四全靠它了面試題
- String常見面試題面試題
- Docker常見面試題Docker面試題
- vue 常見面試題Vue面試題
- Mysql 常見面試題MySql面試題
- Redis 常見面試題Redis面試題
- Golang常見面試題Golang面試題
- Spring常見面試題!Spring面試題
- Hadoop常見面試題Hadoop面試題
- Dubbo常見面試題面試題
- 前端常見面試題前端面試題
- ajax常見面試題面試題
- Redis常見面試題Redis面試題
- 常見 React 面試題React面試題
- mybatis常見面試題MyBatis面試題
- spring常見面試題Spring面試題
- SpringMVC常見面試題SpringMVC面試題
- 【Java面試】JSP常見面試題!JavaJS面試題
- 【Java面試】Servlet常見面試題!JavaServlet面試題
- 【Java面試】 Javascript常見面試題!JavaScript面試題
- 效能測試常見面試題面試題
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- 【Java面試】Java常見IO面試題!Java面試題
- 集合常見的面試題面試題
- 常見的JVM 面試題JVM面試題
- MQ / ES 常見面試題MQ面試題
- 【硬核】Dubbo常見面試題面試題
- 常見面試SQL問題面試SQL
- Java常見的面試題Java面試題
- Spring 常見面試問題Spring面試