kafka --- 系列二(kafka最全面試題)


目錄

 

1、請說明什麼是Apache Kafka?

2、說說Kafka的使用場景?

3、使用Kafka有什麼優點和缺點?

4、爲什麼說Kafka性能很好,體現在哪裏?

5、請說明什麼是傳統的消息傳遞方法?

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

7、解釋Kafka的Zookeeper是什麼?我們可以在沒有Zookeeper的情況下使用Kafka嗎?

8、解釋Kafka的用戶如何消費信息?

9、解釋如何提高遠程用戶的吞吐量?

10、解釋一下,在數據製作過程中,你如何能從Kafka得到準確的信息?

11、解釋如何減少ISR中的擾動?broker什麼時候離開ISR?

12、Kafka爲什麼需要複製?

13、如果副本在ISR中停留了很長時間表明什麼?

14、請說明如果首選的副本不在ISR中會發生什麼?

15、有可能在生產後發生消息偏移嗎?

16、Kafka的設計時什麼樣的呢?

17、數據傳輸的事物定義有哪三種?

18、Kafka判斷一個節點是否還活着有那兩個條件?

19、producer是否直接將數據發送到broker的leader(主節點)?

20、Kafa consumer是否可以消費指定分區消息?

21、Kafka消息是採用Pull模式,還是Push模式?

22、Kafka存儲在硬盤上的消息格式是什麼?

23、Kafka高效文件存儲設計特點:

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

25、Kafka創建Topic時如何將分區放置到不同的Broker中

26、Kafka新建的分區會在哪個目錄下創建

27、partition的數據如何保存到硬盤

28、kafka的ack機制

29、Kafka的消費者如何消費數據

30、消費者負載均衡策略

31、kafka消息數據是否有序?

32、kafaka生產數據時數據的分組策略,生產者決定數據產生到集羣的哪個partition中

33、kafka consumer 什麼情況會觸發再平衡reblance?

34、描述下kafka consumer 再平衡步驟?

35、在Kafka中broker的意義是什麼?

36、什麼是broker?作用是什麼?

37、kafka主要特徵

38、列舉kafka的應用場景

39、kafka主題分區的作用

40、consumer水平擴展如何實現

41、爲了避免磁盤被佔滿,kafka會週期性的刪除陳舊的消息,刪除策略是什麼?

42、什麼是日誌壓縮

43、同一分區的多個副本包括的消息是否一致?

44、ISR集合是什麼?誰維護着?如何維護?

45、Kafka的設計時什麼樣的呢?

46、數據傳輸的事物定義有哪三種?

47、Kafka判斷一個節點是否還活着有那兩個條件?

48、producer是否直接將數據發送到broker的leader(主節點)?

49、Kafa consumer是否可以消費指定分區消息?

50、Kafka消息是採用Pull模式,還是Push模式?

51、Kafka存儲在硬盤上的消息格式是什麼?

52、Kafka高效文件存儲設計特點:

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

54、Kafka創建Topic時如何將分區放置到不同的Broker中

55、Kafka新建的分區會在哪個目錄下創建

56、partition的數據如何保存到硬盤

57、消費者負載均衡策略

58、數據有序

59、kafaka生產數據時數據的分組策略

60、解釋Kafka的Zookeeper是什麼?我們可以在沒有Zookeeper的情況下使用Kafka嗎?

61、Kafka服務器能接收到的最大信息是多少?

62、解釋Kafka的用戶如何消費信息?

63、解釋如何提高遠程用戶的吞吐量?

64、解釋一下,在數據製作過程中,你如何能從Kafka得到準確的信息?

65、kafka提高吞吐量的配置

66、kafka支持事務嗎?

67、kafka可以指定時間範圍消費嗎?

68、新增分區Spark 能發現嗎

69、kafka分區數怎麼設定呢?

70、kafka的重要監控指標有哪些



1、請說明什麼是Apache Kafka?

    Apache Kafka是由Apache開發的一種發佈訂閱消息系統,它是一個分佈式的、分區的和可複製的提交日誌服務。

2、說說Kafka的使用場景?

    ①異步處理
    ②應用解耦
    ③流量削峯
    ④日誌處理
    ⑤消息通訊等。

3、使用Kafka有什麼優點和缺點?

    優點:
    ①支持跨數據中心的消息複製;
    ②單機吞吐量:十萬級,最大的優點,就是吞吐量高;
    ③topic數量都吞吐量的影響:topic從幾十個到幾百個的時候,吞吐量會大幅度下降。所以在同等機器下,kafka儘量保證topic數量不要過多。如果要支撐大規模topic,需要增加更多的機器資源;
    ④時效性:ms級;
    ⑤可用性:非常高,kafka是分佈式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用;
    ⑥消息可靠性:經過參數優化配置,消息可以做到0丟失;
    ⑦功能支持:功能較爲簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日誌採集被大規模使用。

    缺點:
    ①由於是批量發送,數據並非真正的實時; 僅支持統一分區內消息有序,無法實現全局消息有序;
    ②有可能消息重複消費;
    ③依賴zookeeper進行元數據管理,等等。

4、爲什麼說Kafka性能很好,體現在哪裏?

    ①順序讀寫
    ②零拷貝
    ③分區
    ④批量發送
    ⑤數據壓縮

5、請說明什麼是傳統的消息傳遞方法?

    傳統的消息傳遞方法包括兩種:
    排隊:在隊列中,一組用戶可以從服務器中讀取消息,每條消息都發送給其中一個人。
    發佈-訂閱:在這個模型中,消息被廣播給所有的用戶。

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

    ①快速:單一的Kafka代理可以處理成千上萬的客戶端,每秒處理數兆字節的讀寫操作。
    ②可伸縮:在一組機器上對數據進行分區
    ③和簡化,以支持更大的數據
    ④持久:消息是持久性的,並在集羣中進
    ⑤行復制,以防止數據丟失。
    ⑥設計:它提供了容錯保證和持久性

7、解釋Kafka的Zookeeper是什麼?我們可以在沒有Zookeeper的情況下使用Kafka嗎?

    Zookeeper是一個開放源碼的、高性能的協調服務,它用於Kafka的分佈式應用。
    不,不可能越過Zookeeper,直接聯繫Kafka broker。一旦Zookeeper停止工作,它就不能服務客戶端請求。
    Zookeeper主要用於在集羣中不同節點之間進行通信
    在Kafka中,它被用於提交偏移量,因此如果節點在任何情況下都失敗了,它都可以從之前提交的偏移量中獲取
    除此之外,它還執行其他活動,如: leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態等等。

8、解釋Kafka的用戶如何消費信息?

    在Kafka中傳遞消息是通過使用sendfile API完成的。它支持將字節從套接口轉移到磁盤,通過內核空間保存副本,並在內核用戶之間調用內核。

9、解釋如何提高遠程用戶的吞吐量?

    如果用戶位於與broker不同的數據中心,則可能需要調優套接口緩衝區大小,以對長網絡延遲進行攤銷。

10、解釋一下,在數據製作過程中,你如何能從Kafka得到準確的信息?

    在數據中,爲了精確地獲得Kafka的消息,你必須遵循兩件事: 在數據消耗期間避免重複,在數據生產過程中避免重複。
    這裏有兩種方法,可以在數據生成時準確地獲得一個語義:
    每個分區使用一個單獨的寫入器,每當你發現一個網絡錯誤,檢查該分區中的最後一條消息,以查看您的最後一次寫入是否成功
    在消息中包含一個主鍵(UUID或其他),並在用戶中進行反複製

11、解釋如何減少ISR中的擾動?broker什麼時候離開ISR?

    ISR是一組與leaders完全同步的消息副本,也就是說ISR中包含了所有提交的消息。ISR應該總是包含所有的副本,直到出現真正的故障。如果一個副本從leader中脫離出來,將會從ISR中刪除。

12、Kafka爲什麼需要複製?

    Kafka的信息複製確保了任何已發佈的消息不會丟失,並且可以在機器錯誤、程序錯誤或更常見些的軟件升級中使用。

13、如果副本在ISR中停留了很長時間表明什麼?

    如果一個副本在ISR中保留了很長一段時間,那麼它就表明,跟蹤器無法像在leader收集數據那樣快速地獲取數據。

14、請說明如果首選的副本不在ISR中會發生什麼?

    如果首選的副本不在ISR中,控制器將無法將leadership轉移到首選的副本。

15、有可能在生產後發生消息偏移嗎?

    在大多數隊列系統中,作爲生產者的類無法做到這一點,它的作用是觸發並忘記消息。broker將完成剩下的工作,比如使用id進行適當的元數據處理、偏移量等。

    作爲消息的用戶,你可以從Kafka broker中獲得補償。如果你注視SimpleConsumer類,你會注意到它會獲取包括偏移量作爲列表的MultiFetchResponse對象。此外,當你對Kafka消息進行迭代時,你會擁有包括偏移量和消息發送的MessageAndOffset對象。

16、Kafka的設計時什麼樣的呢?

    Kafka將消息以topic爲單位進行歸納 將向Kafka topic發佈消息的程序成爲producers. 將預訂topics並消費消息的程序成爲consumer. Kafka以集羣的方式運行,可以由一個或多個服務組成,每個服務叫做一個broker. producers通過網絡將消息發送到Kafka集羣,集羣向消費者提供消息

17、數據傳輸的事物定義有哪三種?

    (1)最多一次:消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸
    (2)最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸
    (3)精確的一次(Exactly once): 不會漏傳輸也不會重複傳輸,每個消息都傳輸被一次而且僅僅被傳輸一次,這是大家所期望的

18、Kafka判斷一個節點是否還活着有那兩個條件?

    (1)節點必須可以維護和ZooKeeper的連接,Zookeeper通過心跳機制檢查每個節點的連接
    (2)如果節點是個follower,他必須能及時的同步leader的寫操作,延時不能太久

19、producer是否直接將數據發送到broker的leader(主節點)?

    producer直接將數據發送到broker的leader(主節點),不需要在多個節點進行分發,爲了幫助producer做到這點,所有的Kafka節點都可以及時的告知:哪些節點是活動的,目標topic目標分區的leader在哪。這樣producer就可以直接將消息發送到目的地了。

20、Kafa consumer是否可以消費指定分區消息?

    Kafa consumer消費消息時,向broker發出"fetch"請求去消費特定分區的消息,consumer指定消息在日誌中的偏移量(offset),就可以消費從這個位置開始的消息,customer擁有了offset的控制權,可以向後回滾去重新消費之前的消息,這是很有意義的

21、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拉取數據。Push模式必須在不知道下游consumer消費能力和消費策略的情況下決定是立即推送每條消息還是緩存之後批量推送。如果爲了避免consumer崩潰而採用較低的推送速率,將可能導致一次只推送較少的消息而造成浪費。Pull模式下,consumer就可以根據自己的消費能力去決定這些策略

    Pull有個缺點是,如果broker沒有可供消費的消息,將導致consumer不斷在循環中輪詢,直到新消息到t達。爲了避免這點,Kafka有個參數可以讓consumer阻塞知道新消息到達(當然也可以阻塞知道消息的數量達到某個特定的量這樣就可以批量發

22、Kafka存儲在硬盤上的消息格式是什麼?

    消息由一個固定長度的頭部和可變長度的字節數組組成。頭部包含了一個版本號和CRC32校驗碼。
    消息長度: 4 bytes (value: 1+4+n)
    版本號: 1 byte
    CRC校驗碼: 4 bytes
    具體的消息: n bytes

23、Kafka高效文件存儲設計特點:

    (1)Kafka把topic中一個parition大文件分成多個小文件段,通過多個小文件段,就容易定期清除或刪除已經消費完文件,減少磁盤佔用。
    (2)通過索引信息可以快速定位message和確定response的最大大小。
    (3)通過index元數據全部映射到memory,可以避免segment file的IO磁盤操作。
    (4)通過索引文件稀疏存儲,可以大幅降低index文件元數據佔用空間大小。

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

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

25、Kafka創建Topic時如何將分區放置到不同的Broker中

副本因子不能大於 Broker 的個數;
第一個分區(編號爲0)的第一個副本放置位置是隨機從 brokerList 選擇的;
其他分區的第一個副本放置位置相對於第0個分區依次往後移。也就是如果我們有5個 Broker,5個分區,假設第一個分區放在第四個 Broker 上,那麼第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,依次類推;
剩餘的副本相對於第一個副本放置位置其實是由 nextReplicaShift 決定的,而這個數也是隨機產生的

26、Kafka新建的分區會在哪個目錄下創建

    在啓動 Kafka 集羣之前,我們需要配置好 log.dirs 參數,其值是 Kafka 數據的存放目錄,這個參數可以配置多個目錄,目錄之間使用逗號分隔,通常這些目錄是分佈在不同的磁盤上用於提高讀寫性能。 當然我們也可以配置 log.dir 參數,含義一樣。只需要設置其中一個即可。 如果 log.dirs 參數只配置了一個目錄,那麼分配到各個 Broker 上的分區肯定只能在這個目錄下創建文件夾用於存放數據。 但是如果 log.dirs 參數配置了多個目錄,那麼 Kafka 會在哪個文件夾中創建分區目錄呢?答案是:Kafka 會在含有分區目錄最少的文件夾中創建新的分區目錄,分區目錄名爲 Topic名+分區ID。注意,是分區文件夾總數最少的目錄,而不是磁盤使用量最少的目錄!也就是說,如果你給 log.dirs 參數新增了一個新的磁盤,新的分區目錄肯定是先在這個新的磁盤上創建直到這個新的磁盤目錄擁有的分區目錄不是最少爲止。

27、partition的數據如何保存到硬盤

    topic中的多個partition以文件夾的形式保存到broker,每個分區序號從0遞增, 且消息有序 Partition文件下有多個segment(xxx.index,xxx.log) segment 文件裏的 大小和配置文件大小一致可以根據要求修改 默認爲1g 如果大小大於1g時,會滾動一個新的segment並且以上一個segment最後一條消息的偏移量命名

28、kafka的ack機制

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

29、Kafka的消費者如何消費數據

    消費者每次消費數據的時候,消費者都會記錄消費的物理偏移量(offset)的位置 等到下次消費時,他會接着上次位置繼續消費。同時也可以按照指定的offset進行重新消費。

30、消費者負載均衡策略

    結合consumer的加入和退出進行再平衡策略。

31、kafka消息數據是否有序?

    消費者組裏某具體分區是有序的,所以要保證有序只能建一個分區,但是實際這樣會存在性能問題,具體業務具體分析後確認。
    kafka保證一個partition內消息是有序的,但是並不保證多個partition之間的數據有順序,每個topic可以劃分成多個分區,同一個topic下的不同分區包含的消息是不同的,每個消息在被添加到分區時,都會被分配一個offset,它是此消息在分區中的唯一編號,kafka通過offset保證消息在分區內的順序,offset順序不跨分區,即kafka只保證在同一個分區內的消息是有序的

32、kafaka生產數據時數據的分組策略,生產者決定數據產生到集羣的哪個partition中

    每一條消息都是以(key,value)格式 Key是由生產者發送數據傳入 所以生產者(key)決定了數據產生到集羣的哪個partition

33、kafka consumer 什麼情況會觸發再平衡reblance?

    ①一旦消費者加入或退出消費組,導致消費組成員列表發生變化,消費組中的所有消費者都要執行再平衡。
    ②訂閱主題分區發生變化,所有消費者也都要再平衡。

34、描述下kafka consumer 再平衡步驟?

    ①關閉數據拉取線程,情空隊列和消息流,提交偏移量;
    ②釋放分區所有權,刪除zk中分區和消費者的所有者關係;
    ③將所有分區重新分配給每個消費者,每個消費者都會分到不同分區;
    ④將分區對應的消費者所有關係寫入ZK,記錄分區的所有權信息;
    ⑤重啓消費者拉取線程管理器,管理每個分區的拉取線程。

35、在Kafka中broker的意義是什麼?

    接收Producer發過來的數據,並且將它持久化,同時提供給Consumer去訂閱
    組成Kafka集羣節點,之間沒有主從關係,依賴ZooKeeper來協調,broker負責消息的讀取和存儲,一個broker可以管理多個partition

36、什麼是broker?作用是什麼?

    一個單獨的kafka server就是一個broker,broker主要工作就是接收生產者發過來的消息,分配offset,之後保存到磁盤中。同時,接收消費者、其他broker的請求,根據請求類型進行相應的處理並返回響應,在一般的生產環境中,一個broker獨佔一臺物理服務器

37、kafka主要特徵

    kafka具有近乎實時性的消息處理能力,面對海量數據,高效的存儲消息和查詢消息。kafka將消息保存在磁盤中,以順序讀寫的方式訪問磁盤,從而避免了隨機讀寫磁盤導致的性能瓶頸
    kafka支持批量讀寫消息,並且對消息批量壓縮,提高了網絡利用率和壓縮效率
    kafka支持消息分區,每個分區中的消息保證順序傳輸,而分區之間可以併發操作,提高了kafka的併發能力
    kafka支持在線增加分區,支持在線水平擴展
    kafka支持爲每個分區創建多個副本,其中只會有一個leader副本負責讀寫,其他副本只負責與leader副本同步,這種方式提高了數據的容災能力,kafka會將leader副本均勻的分佈在集羣中的服務器上,實現性能最大化

38、列舉kafka的應用場景

    日誌收集:一個公司可以用Kafka可以收集各種服務的log,通過kafka以統一接口服務的方式開放給各種consumer,例如Hadoop、Hbase、Solr等
    消息系統:解耦和生產者和消費者、緩存消息等
    用戶活動跟蹤:Kafka經常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網頁、搜索、點擊等活動,這些活動信息被各個服務器發佈到kafka的topic中,然後訂閱者通過訂閱這些topic來做實時的監控分析,或者裝載到Hadoop、數據倉庫中做離線分析和挖掘
    運營指標:Kafka也經常用來記錄運營監控數據。包括收集各種分佈式應用的數據,生產各種操作的集中反饋,比如報警和報告
    流式處理:比如spark streaming和storm
    事件源

39、kafka主題分區的作用

    kafka的每個topic都可以分爲多個partition,每個partition都有多個replica(副本),每個分區中的消息是不同的,提高了併發讀寫的能力,而同一分區的不同副本中保存的是相同的消息,副本之間是一主多從關係,其中leader副本處理讀寫請求,follower副本只與leader副本進行消息同步,當leader副本出現故障時,則從follower副本中重新選舉leader副本對外提供服務。這樣,通過提高分區的數量,就可以實現水平擴展,通過提高副本數量,就可以提高容災能力

40、consumer水平擴展如何實現

    kafka支持consumer水平擴展,可以讓多個consumer加入一個consumer group,在一個consumer group中,每個分區只能分配給一個consumer,當kafka服務端增加分區數量進行水平擴展後,可以向consumer group中增加新的consumer來提高整個consumer group的消費能力,當consumer group 中的一個consumer出現故障下線時,會通過rebalance操作下線consumer,它負責處理的分區將分配給其他consumer

41、爲了避免磁盤被佔滿,kafka會週期性的刪除陳舊的消息,刪除策略是什麼?

    一種是根據消息保留的時間
    一種是根據topic存儲的數據大小

42、什麼是日誌壓縮

    在很多場景中,消息的key與value之間的對應關係是不斷變化的,消費者只關心key對應的最新value,此時,可以開啓kafka的日誌壓縮功能,kafka會在後臺啓動一個線程,定期將相同key的消息進行合併,只保留最新的value值

43、同一分區的多個副本包括的消息是否一致?

    每個副本中包含的消息是一樣的,但是再同一時刻,副本之間並不是完全一樣的

44、ISR集合是什麼?誰維護着?如何維護?

    ISR(In-Sync Replica)集合表示的是目前可用並且消息量與leader相差不多的副本集合,這是整個副本集合的一個子集
    ISR集合的副本必須滿足:副本所在節點必須維持着與zookeeper的連接;副本最後一條消息的offset與leader副本最後一條消息的offset之間的差值不能超出指定的閾值
    每個分區的leader副本都會維護此分區的ISR集合,寫請求首先由leader副本處理,之後follower副本會從leader副本上拉取寫入的消息,這個過程會有一定的延遲,導致follower副本中保存的消息略少於leader副本,只要未超出閾值都是可以容忍的

45、Kafka的設計時什麼樣的呢?

    Kafka將消息以topic爲單位進行歸納
    將向Kafka topic發佈消息的程序成爲producer
    將預訂topics並消費消息的程序成爲consumer
    Kafka以集羣的方式運行,可以由一個或多個服務組成,每個服務叫做一個broker
    producers通過網絡將消息發送到Kafka集羣,集羣向消費者提供消息

46、數據傳輸的事物定義有哪三種?

    數據傳輸的事務定義通常有以下三種級別:
    (1)最多一次:消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸
    (2)最少一次:消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸.
    (3)精確的一次(Exactly once):不會漏傳輸也不會重複傳輸,每個消息都傳輸被一次而且僅僅被傳輸一次,這是大家所期望的

47、Kafka判斷一個節點是否還活着有那兩個條件?

    節點必須可以維護和ZooKeeper的連接,Zookeeper通過心跳機制檢查每個節點的連接
    如果節點是個follower,他必須能及時的同步leader的寫操作,延時不能太久

48、producer是否直接將數據發送到broker的leader(主節點)?

    producer直接將數據發送到broker的leader(主節點),不需要在多個節點進行分發,爲了幫助producer做到這點,所有的Kafka節點都可以及時的告知:哪些節點是活動的,目標topic目標分區的leader在哪。這樣producer就可以直接將消息發送到目的地了

49、Kafa consumer是否可以消費指定分區消息?

    Kafa consumer消費消息時,向broker發出"fetch"請求去消費特定分區的消息,consumer指定消息在日誌中的偏移量(offset),就可以消費從這個位置開始的消息,customer擁有了offset的控制權,可以向後回滾去重新消費之前的消息,這是很有意義的

50、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拉取數據。Push模式必須在不知道下游consumer消費能力和消費策略的情況下決定是立即推送每條消息還是緩存之後批量推送。如果爲了避免consumer崩潰而採用較低的推送速率,將可能導致一次只推送較少的消息而造成浪費。Pull模式下,consumer就可以根據自己的消費能力去決定這些策略
    Pull有個缺點是,如果broker沒有可供消費的消息,將導致consumer不斷在循環中輪詢,直到新消息到t達。爲了避免這點,Kafka有個參數可以讓consumer阻塞知道新消息到達(當然也可以阻塞知道消息的數量達到某個特定的量這樣就可以批量發

51、Kafka存儲在硬盤上的消息格式是什麼?

    消息由一個固定長度的頭部和可變長度的字節數組組成。頭部包含了一個版本號和CRC32校驗碼。
        消息長度: 4 bytes (value: 1+4+n)
        版本號: 1 byte
        CRC校驗碼: 4 bytes
        具體的消息: n bytes

52、Kafka高效文件存儲設計特點:

    Kafka把topic中一個parition大文件分成多個小文件段,通過多個小文件段,就容易定期清除或刪除已經消費完文件,減少磁盤佔用。
    通過索引信息可以快速定位message和確定response的最大大小。
    通過index元數據全部映射到memory,可以避免segment file的IO磁盤操作。
    通過索引文件稀疏存儲,可以大幅降低index文件元數據佔用空間大小。

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

    Kafka 持久化日誌,這些日誌可以被重複讀取和無限期保留
    Kafka 是一個分佈式系統:它以集羣的方式運行,可以靈活伸縮,在內部通過複製數據提升容錯能力和高可用性
    Kafka 支持實時的流式處理

54、Kafka創建Topic時如何將分區放置到不同的Broker中

    副本因子不能大於 Broker 的個數;
    第一個分區(編號爲0)的第一個副本放置位置是隨機從 brokerList 選擇的;
    其他分區的第一個副本放置位置相對於第0個分區依次往後移。也就是如果我們有5個 Broker,5個分區,假設第一個分區放在第四個 Broker 上,那麼第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,依次類推;
    剩餘的副本相對於第一個副本放置位置其實是由 nextReplicaShift 決定的,而這個數也是隨機產生的

55、Kafka新建的分區會在哪個目錄下創建

    在啓動 Kafka 集羣之前,我們需要配置好 log.dirs 參數,其值是 Kafka 數據的存放目錄,這個參數可以配置多個目錄,目錄之間使用逗號分隔,通常這些目錄是分佈在不同的磁盤上用於提高讀寫性能。
    當然我們也可以配置 log.dir 參數,含義一樣。只需要設置其中一個即可。
    如果 log.dirs 參數只配置了一個目錄,那麼分配到各個 Broker 上的分區肯定只能在這個目錄下創建文件夾用於存放數據。
    但是如果 log.dirs 參數配置了多個目錄,那麼 Kafka 會在哪個文件夾中創建分區目錄呢?答案是:Kafka 會在含有分區目錄最少的文件夾中創建新的分區目錄,分區目錄名爲 Topic名+分區ID。注意,是分區文件夾總數最少的目錄,而不是磁盤使用量最少的目錄!也就是說,如果你給 log.dirs 參數新增了一個新的磁盤,新的分區目錄肯定是先在這個新的磁盤上創建直到這個新的磁盤目錄擁有的分區目錄不是最少爲止。

56、partition的數據如何保存到硬盤

    topic中的多個partition以文件夾的形式保存到broker,每個分區序號從0遞增,且消息有序
    Partition文件下有多個segment(xxx.index,xxx.log)
    segment 文件裏的 大小和配置文件大小一致可以根據要求修改 默認爲1g
    如果大小大於1g時,會滾動一個新的segment並且以上一個segment最後一條消息的偏移量命名

57、消費者負載均衡策略

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

58、數據有序

    一個消費者組裏它的內部是有序的
    消費者組與消費者組之間是無序的

59、kafaka生產數據時數據的分組策略

    生產者決定數據產生到集羣的哪個partition中
    每一條消息都是以(key,value)格式
    Key是由生產者發送數據傳入
    所以生產者(key)決定了數據產生到集羣的哪個partition

60、解釋Kafka的Zookeeper是什麼?我們可以在沒有Zookeeper的情況下使用Kafka嗎?

    Zookeeper是一個開放源碼的、高性能的協調服務,它用於Kafka的分佈式應用。
    作用:協調Kafka Broker,存儲原數據:consumer的offset+broker信息+topic信息+partition個信息。
    不,不可能越過Zookeeper,直接聯繫Kafka broker。一旦Zookeeper停止工作,它就不能服務客戶端請求。
    Zookeeper主要用於在集羣中不同節點之間進行通信
    在Kafka中,它被用於提交偏移量,因此如果節點在任何情況下都失敗了,它都可以從之前提交的偏移量中獲取
    除此之外,它還執行其他活動,如: leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態等等。

61、Kafka服務器能接收到的最大信息是多少?

Kafka服務器可以接收到的消息的最大大小是1000000字節。
Kafka服務器可以接收到的消息的最大大小由參數message.max.bytes決定,010版本默認值是1000012,可以配置爲broker級別或者topic級別。

62、解釋Kafka的用戶如何消費信息?

在Kafka中傳遞消息是通過使用sendfile【零拷貝】 API完成的。它支持將字節從套接口轉移到磁盤,通過內核空間保存副本,並在內核用戶之間調用內核。
        零拷貝:用戶向內核去發送一個命令,我要操作那些數據,然後直接從磁盤轉成Socket Buffer,再從Socket Buffer到網卡Buffer,再傳出去【少了兩次的copy】

在Kafka中傳遞消息是通過使用sendfile API完成的。它支持將字節從套接口轉移到磁盤,通過內核空間保存副本,並在內核用戶之間調用內核。

消費者消費有各種客戶端:

010:http://kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html

63、解釋如何提高遠程用戶的吞吐量?

如果用戶位於與broker不同的數據中心,則可能需要調優套接口緩衝區大小,以對長網絡延遲進行攤銷。

64、解釋一下,在數據製作過程中,你如何能從Kafka得到準確的信息?

在數據中,爲了精確地獲得Kafka的消息,你必須遵循兩件事: 在數據消耗期間避免重複,在數據生產過程中避免重複。

這裏有兩種方法,可以在數據生成時準確地獲得一個語義:
每個分區使用一個單獨的寫入器,每當你發現一個網絡錯誤,檢查該分區中的最後一條消息,以查看您的最後一次寫入是否成功
在消息中包含一個主鍵(UUID或其他),並在用戶中進行反複製

65、kafka提高吞吐量的配置

最基礎的配置是

batch.size 默認是單批次最大16384字節,超過該值就立即發送。

linger.ms 默認是0ms,超過該時間就立即發送。

上面兩個條件滿足其一,就立即發送消息否則等待。


66、kafka支持事務嗎?

0.11版本以後開始支持事務的生產者和消費者。

67、kafka可以指定時間範圍消費嗎?

0.10.2版本以後支持指定時間戳範圍消費kafka數據。

68、新增分區Spark 能發現嗎

Spark Streaming針對kafka0.8.2及以前版本不能進行新增分區及topic發現,0.10以後版本是可以動態檢測新增分區和topic。

69、kafka分區數怎麼設定呢?

一般可以設置爲broker或者磁盤的整數倍,然後再結合數據量和後段消費者處理的複雜度及消費者組的數來確定。

70、kafka的重要監控指標有哪些

磁盤對與kafka來說比較重要,儘量做矩陣和監控,避免集羣故障,而且磁盤問題最容易引起吞吐量下降。
網卡流量,由於副本同步,消費者多導致網路帶寬很容易喫緊,所以監控也比較重要。
topic流量波動情況,這個主要是爲了後端應對流量尖峯作準備。
消費者lagsize,也即使消費者滯後情況。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章