1. 用途
1. 流量削峰
2. 流計算
2.?Kafka的核心組件
在Kafka中,Producer、Broker和Consumer是三個關鍵的角色,它們在整個消息傳遞過程中扮演不同的角色和功能:1. **Producer(生產者)**:生產者是消息的發送方,負責將消息發布到Kafka的主題(Topic)中。生產者將消息發送給Kafka集群中的一個或多個Broker,然后由Broker將消息持久化并進行分發。生產者可以根據業務需求配置消息的發送策略,例如同步發送、異步發送等。2. **Broker(代理服務器)**:Broker是Kafka集群中的中間服務器,負責接收、存儲和分發消息。每個Broker都有自己的存儲空間,將消息以分區(Partition)的方式存儲在本地磁盤上。Broker負責管理主題的元數據、分區的分布和復制,以及處理生產者和消費者的請求。多個Broker組成的集群共同構成了一個高可用、分布式的消息傳遞平臺。3. **Consumer(消費者)**:消費者是消息的接收方,負責從Kafka的主題中訂閱消息并進行消費。消費者從Broker中拉取(Pull)消息,可以控制消息的消費進度和速率。消費者可以以不同的消費者組(Consumer Group)身份訂閱同一個主題,這樣可以實現消息的廣播或分組消費。綜合起來,Producer負責將消息發布到Kafka,Broker負責存儲和分發消息,而Consumer負責訂閱和消費消息。這三個角色共同構成了Kafka的核心組件,使得Kafka能夠實現高性能、高可用的消息傳遞和處理。
3. Kafka中Topic的概念
消息類別,Kafka按照topic來分類消息
Topic是對消息的分類,屬于Producer(生產者)和Consumer(消費者)之間的概念Producer會把消息接受到特定的Producer,Broker會管理和分配這些消息。
Consumer會從Consumer特定的區域請求拿到屬于他的topic消息,然后進行消費。
消費完成之后使用offset標記
4.?kafka維護消息狀態的跟蹤方法
Kafka中的Topic會被分為若干分區,每個分區同一時間只能被一個consumer消費
consumer消費之后會把消息offset標記,通過位置偏移來追蹤消費狀態
5.?zookeeper對于kafka的作用是什么
1. Zookeeper在kafka集群中用于節點之間的通信
2. Zookeeper用于管理consumer提交的偏移消息
3. Consumer提交offset消息過程:1. Consumer用自己特有的偏移量把消費后的消息提交給Zookeeper,這個過程異步2. Zookeeper保存偏移后的消息到自己的數據結構里面3. 如果Consumer故障后重啟,可以向Zookeeper查詢上次提交偏移的位置,從而消費后續的消息。避免了數據的重復或丟失
6.?kafka判斷一個節點還活著的有那兩個條件
1. 節點和Zookeeper保持鏈接,Zookeeper會不定時發送心跳的探測
2. 如果follow節點,需要定時同步master的同步消息
7.?kafka?如何不消費重復數據
1. 首先應該從消息源確定,Producer收到發送給Broker的消息都有唯一的Id,保障冪等性。
2. 冪等性保證了即使生產者在發送消息的過程中發生了重試,同一條消息也只會被成功寫入一次。無論生產者發送消息多少次,只要消息內容相同,只有一次會被寫入。
8.?kafka如何實現數據的高效讀取
1. 對不同topic進行分區,分區之后可以被多個Consumer同時并行獲取處理
2. 每個分區都維護了高效的索引
3. 副本機制:每個分區都可以有自己的多個副本,副本允許被讀取
4. Consumer讀取消息后offset是異步給Zookeeper保存,可以繼續執行其他消息處理步驟
5. 零拷貝:kafka的數據傳輸使用零拷貝技術,避免資源浪費零拷貝和傳統拷貝的區別:
傳統是內核態和用戶之間的拷貝,而零拷貝直接在設備和內存空間拷貝
在零拷貝技術中,數據傳輸的過程中數據不再需要從內核緩沖區拷貝到用戶緩沖區,而是直接在內核和設備之間傳輸,避免了中間的拷貝操作。這種方式可以顯著減少CPU的開銷,提高數據傳輸的速度,并降低系統負擔。
9. Kafka的那些設計讓它有如此高的性能
1. 使用分布式消息隊列
2. 使用零拷貝模式
3. 對log文件分區,創建索引