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、一個分區內的一條數據,只能被一個消費組內的一個消費者消費。
10、消費者的最大併發度由topic的分區數量決定
11、分區副本的數量必須小於等於broker的數量
12、一個topic內的多個分區,每個分區只是所有數據的一部分。所有分區的數據累加到一起是這個topic的全部數據。
13、zookeeper中記錄了broker的id  、消費者消費數據的offset,消費者與partition的對應關係(ConsumerA—> Partition-0, ConsumerB—> Partition-1)

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、 ISR是什麼?

	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、最多一次:消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸
​			可能會造成數據丟失。

2、 最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸.
			可能會造成數據的重複消費。

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、leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態	

3、分區和消費者的所有者關

4、broker id

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

1、一旦消費者加入或退出消費組,導致消費組成員列表發生變化,消費組中的所有消費者都要執行再平衡。

2、訂閱主題分區發生變化,所有消費者也都要再平衡。

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

1、關閉數據拉取線程,清空隊列和消息流,提交偏移量;

2、釋放分區所有權,刪除zk中分區和消費者的所有者關係;

3、將所有分區重新分配給每個消費者,每個消費者都會分到不同分區;

4、將分區對應的消費者所有關係寫入ZK,記錄分區的所有權信息;

5、重啓消費者拉取線程管理器,管理每個分區的拉取線程。

33、手動提交offset有什麼好處??

​	使更新offset更及時,避免因offset更新不及時導致重複消費數據的問題。

34、爲什麼kafka中的數據需要定期刪除或合併?

​	Kafka只用於做數據的臨時存儲、臨時緩衝,不是永久存儲(永久性存儲使用HDFS)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章