鎖屏面試題百日百刷,每個工作日堅持更新面試題。請看到最後就能獲取你想要的,接下來的是今日的面試題: 1.如何保證Kafka的消息有序 Kafka對於消息的重覆、丟失、錯誤以及順序沒有嚴格的要求。 Kafka只能保證一個partition中的消息被某個consumer消費時是順序的,事實上,從Topi ...
鎖屏面試題百日百刷,每個工作日堅持更新面試題。請看到最後就能獲取你想要的,接下來的是今日的面試題:
1.如何保證Kafka的消息有序
Kafka對於消息的重覆、丟失、錯誤以及順序沒有嚴格的要求。
Kafka只能保證一個partition中的消息被某個consumer消費時是順序的,事實上,從Topic角度來說,當有多個partition時,消息仍然不是全局有序的。
2.kafka數據丟失問題,及如何保證
1)數據丟失:
acks=1的時候(只保證寫入leader成功),如果剛好leader掛了。數據會丟失。
acks=0的時候,使用非同步模式的時候,該模式下kafka無法保證消息,有可能會丟。
2)brocker如何保證不丟失:
acks=all : 所有副本都寫入成功並確認。
retries = 一個合理值。
min.insync.replicas=2 消息至少要被寫入到這麼多副本才算成功。
unclean.leader.election.enable=false 關閉unclean leader選舉,即不允許非ISR中的副本被選舉為leader,以避免數據丟失。
3)Consumer如何保證不丟失
如果在消息處理完成前就提交了offset,那麼就有可能造成數據的丟失。
enable.auto.commit=false 關閉自動提交offset
處理完數據之後手動提交。
3.kafka的balance是怎麼做的
官方原文
Producers publish data to the topics of their choice. The producer is able to choose which message
to assign to which partition within the topic. This can be done in a round-robin fashion simply to
balance load or it can be done according to some semantic partition function (say based on some
key in the message). More on the use of partitioning in a second. 翻譯:
生產者將數據發佈到他們選擇的主題。生產者可以選擇在主題中分配哪個分區的消息。這可以通過迴圈的方式來完成,只是為了平衡負載,或者可以根據一些語義分區功能(比如消息中的一些鍵)來完成。更多關於分區在一秒鐘內的使用。
4.kafka的消費者方式
consumer採用pull(拉)模式從broker中讀取數據。
push(推)模式很難適應消費速率不同的消費者,因為消息發送速率是由broker決定的。它的目標是儘可能以最快速度傳遞消息,但是這樣很容易造成consumer來不及處理消息,典型的表現就是拒絕服務以及網路擁塞。
而pull模式則可以根據consumer的消費能力以適當的速率消費消息。
對於Kafka而言,pull模式更合適,它可簡化broker的設計,consumer可自主控制消費消息的速率,同時consumer可以自己控制消費方式——即可批量消費也可逐條消費,同時還能選擇不同的提交方式從而實現不同的傳輸語義。
pull模式不足之處是,如果kafka沒有數據,消費者可能會陷入迴圈中,一直等待數據到達。為了避免這種情況,我們在我們的拉請求中有參數,允許消費者請求在等待數據到達的“長輪詢”中進行阻塞。
全部內容在git上,瞭解更多請點我頭像或到我的主頁去獲得,謝謝