kafka簡答題

kafka工作流程

  1. Kafka生態系統四大角色,生產者(Producer)、kafka集羣(Broker)、消費者(Consumer)、zookeeper
  2. 每個消費者都必須屬於一個消費組,一個組內的消費者可以多個。
  3. 一個Topic可以有1到多個多個分區(Partition)
  4. 一個分區可以有1到多個segment。
  5. 每個segment可以有由一個log和一個index組成。
  6. 被複制的分區叫做主副本(Leader),複製出來的叫做從副本(Follower)
  7. 生產者只往主副本寫數據,消費者只在主副本拉取數據。
  8. 從副本只做數據備份,不做數據讀寫。
  9. 13、zookeeper中記錄了broker的id  、消費者消費數據的offset,消費者與partition的對應關係(ConsumerA—> Partition-0, ConsumerB—> Partition-1)

【隱藏知識點】

  1. 一個分區內的一條數據,只能被一個消費組內的一個消費者消費。
  2. 消費者的最大併發度由topic的分區數量決定
  3. 分區副本的數量必須小於等於broker的數量
  4. 一個topic內的多個分區,每個分區只是所有數據的一部分。所有分區的數據累加到一起是這個topic的全部數據。

1、    什麼是kafka
是一個分佈式,分區的,多副本的,多訂閱者的消息發佈訂閱系統。

2、kafka的使用場景
應用耦合、異步處理、限流削峯、消息驅動的系統

3、    kafka優缺點
優點:可靠性強(分佈式-分區-副本)、擴展性強(可伸縮)、性能高(數據讀寫)、耐用性強(數據持久化)、時效性強。
缺點:由於是批量發送,數據並非真正的實時。
僅支持同一分區內消息有序,無法實現全局消息有序; 
有可能消息重複消費; 
依賴zookeeper進行元數據管理。

4、Kafka架構(流程)
    生產者、kafka集羣、消費者、zookeeper
5、Kafka架構(API)
    生產者、消費者、StreamAPI、ConnectAPI

6、Topic內部有哪些組成?
    每個Topic包含一個或者多個Partition,一個partition當中存在多個segment文件段,每個segment分爲兩部分,.log文件和.index文件。
7、分區和消費組內的消費者之間的關係有哪些情況?
Partition = 消費任務的併發度=剛剛好,每個任務讀取一個partition數據
Partition > 消費任務的併發度=有部分消費任務讀取多個分區的數據
Partition < 消費任務的併發度=有部分消費任務空閒(可以創建多於分區的消費者數量)

8、分區數、消費者與讀取效率之間的關係
    分區數越多,同一時間可以有越多的消費者來進行消費,消費數據的速度就會越快,提高消費的性能

9、副本數與broker之間的關係
數據副本(包含本身)數一般情況下小於等於broker的個數

10、    什麼是主/從副本
被複制的分區叫做主副本(Leader),複製出來的叫做從副本(Follower)

11、    主/從複本的作用是什麼
主副本負責數據的讀寫。
從副本只做數據備份,不做數據讀寫。

12、    Lsr是什麼?
ISR是一組與leaders完全同步的消息副本(包括leaders本身)。

13、    生產者生產數據到kafka集羣,數據到分區的方式
a)    沒有指定分區編號,沒有指定key,時採用輪詢方式存戶數據
b)    沒有指定分區編號,指定key時,數據分發策略爲對key求取hash值,這個值與分區數量取餘,於數就是分區編號。
c)    指定分區編號,所有數據輸入到指定的分區內
d)    自定義分區


14、    Consumer消費數據的流程
1、    首先Consumer連接指定的Topic partition所在leader broker,使用折半/二分查找,先確定數據所在的segment。
2、    確定在哪個segment後,使用確定的segment內的index文件找到數據具體的位置採用pull方式從kafkalogs中獲取消息。

15、Kafka中的數據刪除機制是什麼?
1、    時間:默認存儲168小時(一週)
2、    數據的大小:默認 -1 (不刪除),可以自行設置。

16、Kafka如何保證數據不丟失
1、    生產者如何保證數據不丟失??  通過ack 機制確保數據不丟失。
2、    kafka集羣如何保證數據不丟失??  通過數據副本保證數據不丟失。
3、消費者如何保證數據不丟失??  通過維護數據的offset 保證數據不丟失。

17、Kafka高性能的原因有哪裏?
    順序讀寫、分區、批量發送、數據壓縮 

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

19、如何從Kafka得到準確的信息(不是重讀數據)?
在數據生產過程中避免重複。
在數據消耗期間避免重複。

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

21、數據傳輸的事物定義有哪三種?
1、最多一次:消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸
            可能會造成數據丟失。
3、    最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸.
可能會造成數據的重複消費。
3、精確的一次(Exactly once): 不會漏傳輸也不會重複傳輸,每個消息都傳輸被一次而且僅僅被傳輸一次,這是大家所期望的


22、Kafka判斷一個節點是否還活着有哪些條件?
1、節點必須可以維護和ZooKeeper的連接,Zookeeper通過心跳機制檢查每個節點的連接
2、如果節點是個follower,他必須能及時的同步leader的寫操作,延時不能太久

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

24、Kafka創建Topic時將分區放置到不同的Broker的策略是什麼?
•前提:副本因子不能大於 Broker 的個數;
•第一個分區(編號爲0)的第一個副本放置位置是隨機從 brokerList 選擇的;
•其他分區的第一個副本放置位置相對於第0個分區依次往後移。
例如:有5個 Broker,5個分區,假設第一個分區放在第四個 Broker 上,那麼第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,第五個分區將會放在第三個 Broker 上;
 

25、Kafka新建的分區會在哪個目錄下創建
若 log.dirs 參數只配置了一個目錄,那麼分配到各個 Broker 上的分區將在這個目錄下創建文件夾用於存放數據。 
若 log.dirs 參數配置了多個目錄,那麼 Kafka 會在含有分區目錄總數最少的文件夾中創建新的分區目錄,分區目錄名爲 Topic名+分區ID。注意(不是磁盤使用量最少的目錄)

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

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

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

29、如何使kafka集羣內的數據是有序的?
只創建一個分區。(但是實際這樣會存在性能問題,具體業務具體分析後確認。)

30、Zookeeper彙總保留了哪些數據?
1、消費者提交的偏移量。
2、分區和消費者的所有者關
3、broker id

說明:leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態    

31、kafka consumer 什麼情況會觸發再平衡reblance?
1、一旦消費者加入或退出消費組,導致消費組成員列表發生變化,消費組中的所有消費者都要執行再平衡。
2、訂閱主題分區發生變化,所有消費者也都要再平衡。

32、描述下kafka consumer 再平衡步驟?
1、關閉數據拉取線程,清空隊列和消息流,提交偏移量;
2、釋放分區所有權,刪除zk中分區和消費者的所有者關係;
3、將所有分區重新分配給每個消費者,每個消費者都會分到不同分區;
4、將分區對應的消費者所有關係寫入ZK,記錄分區的所有權信息;
5、重啓消費者拉取線程管理器,管理每個分區的拉取線程。

33手動提交offset有什麼好處??
    使更新offset更及時,避免因offset更新不及時導致重複消費數據的問題。

34、爲什麼kafka中的數據需要定期刪除或合併?
    Kafka只用於做數據的臨時存儲、臨時緩衝,不是永久存儲(永久性存儲使用HDFS)。

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