Kafka面試專題

1.Kafka 的設計時什麼樣的呢?

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

2.數據傳輸的事物定義有哪三種?

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

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

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

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

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

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

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

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

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

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

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

8.Kafka 高效文件存儲設計特點:

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

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

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

10.Kafka 創建 Topic 時如何將分區放置到不同的 Broker 中 

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

11.Kafka 新建的分區會在哪個目錄下創建

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

12.partition 的數據如何保存到硬盤

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

13.kafka 的 ack 機制

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

14.Kafka 的消費者如何消費數據

消費者每次消費數據的時候,消費者都會記錄消費的物理偏移量(offset)的位置 等到下次消費時,他會接着上次位置繼續消費

15.消費者負載均衡策略

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

16.數據有序

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

17.kafaka 生產數據時數據的分組策略

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

18.Kafka 的設計時什麼樣的呢?

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

19.數據傳輸的事物定義有哪三種?

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

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

(1)節點必須可以維護和 ZooKeeper 的連接,Zookeeper 通過心跳機制檢查每個節點的連

(2)如果節點是個 follower,他必須能及時的同步 leader 的寫操作,延時不能太久

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

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

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

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

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

Kafka 最初考慮的問題是,customer 應該從 brokes 拉取消息還是 brokers 將消息推送到consumer,也就是 pull 還 push。在這方面,Kafka 遵循了一種大部分消息系統共同的傳統的設計:producer 將消息推送到 broker,consumer 從 broker 拉取消息一些消息系統比如 Scribe 和 ApacheFlume 採用了 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 阻塞知道新消息到達(當然也可以阻塞知道消息的數量達到某個特定的量這樣就可以批量發

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

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

25.Kafka 高效文件存儲設計特點:

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

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

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

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

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

28.Kafka 新建的分區會在哪個目錄下創建

在啓動 Kafka 集羣之前,我們需要配置好 log.dirs 參數,其值是 Kafka 數據的存放目錄, 這個參數可以配置多個目錄,目錄之間使用逗號分隔,通常這些目錄是分佈在不同的磁盤上用於提高讀寫性能。

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