Kafka 練習題

 

1、選擇題

  1. Kafka服務器默認能接收的最大消息是多大? (單選) A

    A:1Mweb

    B:10M算法

    C:100M編程

    D:沒有大小限制,由於支持大數據緩存

 

  2.Kafka的特性(多選)  ABCD服務器

    A:高吞吐量、低延遲網絡

    B:可擴展性、持久性、可靠性多線程

    C:容錯性架構

    D:高併發併發

 

  3.kafka 容錯性說話正確的是 ABCD負載均衡

    A:容許集羣中節點失敗(若副本數量爲n,則容許n-1個節點失敗)

    B:殺死集羣中的主節點仍是可使用

    C:殺死集羣中全部的副節點仍是可使用

    D:不管結束的是主仍是副broker,都不會影響kafka使用,只要還有一個副本

 

  4.zookeeper在kafka中的做用(多選) AC

    A:kafka 將元數據信息維護在zookeeper上

    B:kafka的producer、consumer、topic、partition都須要依賴zookeeper

    C:kafka使用zookeeper來實現動態的集羣擴展

    D:發送到topic的數據須要通過zookeeper

 

  5.Kafka相對傳統技術有什麼優點說法正確的是 ABCD

    A:快速:單一的Kafka代理能夠處理成千上萬的客戶端,每秒處理數兆字節的讀寫操做。

    B:可伸縮:在一組機器上對數據進行分區和簡化,以支持更大的數據

    C:持久:消息是持久性的,並在集羣中進行復制,以防止數據丟失。

    D:設計:它提供了容錯保證和持久性

 

  6.Kafka負載均衡原理說法正確的是 ABCD

    A: producer根據用戶指定的算法,將消息發送到指定的partition

    B:存在多個partiiton,每一個partition有本身的replica,每一個replica分佈在不一樣的Broker節點上

    C:多個partition須要選取出lead partition,lead partition負責讀寫,並由zookeeper負責fail over

    D:經過zookeeper管理broker與consumer的動態加入與離開

 

  7.關於partition中的數據是如何保持到硬盤上的,說法正確的是 ABC

    A:一個topic分爲好幾個partition,每個partition是以文件夾的形式保持在broker節點上面的

    B:每個分區的命名是從序號0開始遞增

    C:每個partition目錄下多個segment文件(包含xx.index,xx.log),默認是1G

    D:每一個分區裏面的消息是有序的,數據是同樣的

 

2、判斷題

  1.一個topic有多個partition,消息會存在leader的partition中,其餘partition同步leader的數據?   錯

  2.kafka 支持熱擴展,及擴及用             對

  3.kafka有可能在生產消息後發生消息偏移             錯

  4.就算首選副本不在ISR中,controller也能將leadership轉到首選副本            錯

 

3、練習題(須要本身動手)

  1.搭建並啓動一個3個節點的kafka集羣,並配置使用3個節點的zookeeper集羣。

 

  2.在搭建的 kafak 集羣中建立一個 test 的 topic,指定三個分區三個副本。再次上學會 kafka 的容錯擴容等知識點。

 

  3.自定義一個 producer 攔截器,在消息以前加上「網易雲課堂」。

 

  4.嘗試本身一個 stream 例子。

 

  5.運行 kafka manager 監控工具,嘗試在 web 端去去分區副本遷移。

 

4、綜合題

  1. 爲何要使用消息隊列或 kafka

    緩衝和削峯:上游數據時有突發流量,下游可能扛不住,或者下游沒有足夠多的機器來保證冗餘,kafka在中間能夠起到一個緩衝的做用,把消息暫存在kafka中,下游服務就能夠按照本身的節奏進行慢慢處理。

    解耦和擴展性:項目開始的時候,並不能肯定具體需求。消息隊列能夠做爲一個接口層,解耦重要的業務流程。只須要遵照約定,針對數據編程便可獲取擴展能力。

    冗餘:能夠採用一對多的方式,一個生產者發佈消息,能夠被多個訂閱topic的服務消費到,供多個毫無關聯的業務使用。

    健壯性:消息隊列能夠堆積請求,因此消費端業務即便短期死掉,也不會影響主要業務的正常進行。

    異步通訊:不少時候,用戶不想也不須要當即處理消息。消息隊列提供了異步處理機制,容許用戶把一個消息放入隊列,但並不當即處理它。想向隊列中放入多少消息就放多少,而後在須要的時候再去處理它們。

 

   2.kafka中的broker 是幹什麼的?

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

 

   3.kafka中的 zookeeper 起到什麼做用,能夠不用zookeeper麼

    zookeeper 是一個分佈式的協調組件,早期版本的kafka用zk作meta信息存儲,consumer的消費狀態,group的管理以及 offset的值。考慮到zk自己的一些因素以及整個架構較大機率存在單點問題,新版本中逐漸弱化了zookeeper的做用。新的consumer使用了kafka內部的group coordination協議,也減小了對zookeeper的依賴,

     可是broker依然依賴於ZK,zookeeper 在kafka中還用來選舉controller 和 檢測broker是否存活等等。

 

   4.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的消息量差。

 

   5.什麼狀況下一個 broker 會從 isr中踢出去?

    leader會維護一個與其基本保持同步的Replica列表,該列表稱爲ISR(in-sync Replica),每一個Partition都會有一個ISR,並且是由leader動態維護 ,若是一個follower比一個leader落後太多,或者超過必定時間未發起數據複製請求,則leader將其重ISR中移除。

 

   6.kafka 比其餘消息系統快的緣由?

    Cache Filesystem Cache PageCache緩存

    順序寫 因爲現代的操做系統提供了預讀和寫技術,磁盤的順序寫大多數狀況下比隨機寫內存還要快。

    Zero-copy 零拷⻉技術減小拷貝次數

    Batching of Messages 批量量處理。合併小的請求,而後以流的方式進行交互,直頂網絡上限。

    Pull 拉模式 使用拉模式進行消息的獲取消費,與消費端處理能力相符。

 

   7.kafka producer如何優化打入速度?

    l  增長線程

    l  提升 batch.size

    l  增長更多 producer 實例

    l  增長 partition 數

    l  設置 acks=-1 時,若是延遲增大:能夠增大 num.replica.fetchers(follower 同步數據的線程數)來調解;

    l  跨數據中心的傳輸:增長 socket 緩衝區設置以及 OS tcp 緩衝區設置。

 

  8.kafka producer 打數據,ack  爲 0, 1, -1 的時候表明啥, 設置 -1 的時候,什麼狀況下,leader 會認爲一條消息 commit了?

    1(默認)  數據發送到Kafka後,通過leader成功接收消息的的確認,就算是發送成功了。在這種狀況下,若是leader宕機了,則會丟失數據。

    0 生產者將數據發送出去就無論了,不去等待任何返回。這種狀況下數據傳輸效率最高,可是數據可靠性確是最低的。

      -1 producer須要等待ISR中的全部follower都確認接收到數據後纔算一次發送完成,可靠性最高。

 

    當ISR中全部Replica都向Leader發送ACK時,leader才commit,這時候producer才能認爲一個請求中的消息都commit了。

 

  9.kafka  unclean 配置表明啥,會對 spark streaming 消費有什麼影響?

    unclean.leader.election.enable 爲true的話,意味着非ISR集合的broker 也能夠參與選舉,這樣有可能就會丟數據,spark streaming在消費過程當中拿到的 end offset 會忽然變小,致使 spark streaming job掛掉。若是unclean.leader.election.enable參數設置爲true,就有可能發生數據丟失和數據不一致的狀況,Kafka的可靠性就會下降;而若是unclean.leader.election.enable參數設置爲false,Kafka的可用性就會下降。

 

   10.若是leader crash時,ISR爲空怎麼辦?

    kafka在Broker端提供了一個配置參數:unclean.leader.election,這個參數有兩個值:

    true(默認):容許不一樣步副本成爲leader,因爲不一樣步副本的消息較爲滯後,此時成爲leader,可能會出現消息不一致的狀況。

    false:不容許不一樣步副本成爲leader,此時若是發生ISR列表爲空,會一直等待舊leader恢復,下降了可用性。

   

  11.kafka的message格式是什麼樣的?

    一個Kafka的Message由一個固定長度的header和一個變長的消息體body組成

    header部分由一個字節的magic(文件格式)和四個字節的CRC32(用於判斷body消息體是否正常)構成。

    當magic的值爲1的時候,會在magic和crc32之間多一個字節的數據:attributes(保存一些相關屬性,

    好比是否壓縮、壓縮格式等等);若是magic的值爲0,那麼不存在attributes屬性

    body是由N個字節構成的一個消息體,包含了具體的key/value消息

   

  12.kafka中consumer group 是什麼概念

    一樣是邏輯上的概念,是Kafka實現單播和廣播兩種消息模型的手段。同一個topic的數據,會廣播給不一樣的group;同一個group中的worker,只有一個worker能拿到這個數據。換句話說,對於同一個topic,每一個group均可以拿到一樣的全部數據,可是數據進入group後只能被其中的一個worker消費。group內的worker可使用多線程或多進程來實現,也能夠將進程分散在多臺機器上,worker的數量一般不超過partition的數量,且兩者最好保持整數倍關係,由於Kafka在設計時假定了一個partition只能被一個worker消費(同一group內)。

相關文章
相關標籤/搜索