消費者:消費者,接受消息的壹方。消費者連接Kafka服務器並接收消息,然後進行相應的業務邏輯處理。
消費者群體:消費者的集合。壹個消費者組可以包含壹個或多個消費者。使用多分區多用戶的模式可以大大提高下遊系統的處理速度。同壹個消費群的消費者不會重復消費消息,不同的消費群也不會互相影響,所有的消息都可以收到。卡夫卡通過消費群體實現P2P模式和廣播模式。
經紀人:Kafka服務器。
主題:消息維度在卡夫卡那裏,主題類似於隊列。生產者向特定主題發送信息,消費者通過主題進行消費。
分區:分區是Topic邏輯概念下的壹個分區,每個分區只屬於壹個Topic。壹個主題通常有多個分區,每個分區包含不同的消息。分區可以被視為存儲級的可追加日誌文件,當消息被追加到分區日誌文件時,將會分配壹個特定的偏移量。
Offset:分區中消息的唯壹標識,用於確保分區中消息的順序。Offset不跨分區,即Kafka保證消息在分區內的順序,但不保證消息在Topic下的順序。
復制:副本是Kafka保證數據高可用性的方式。同壹分區的數據可以在多個代理(kafka服務器)上有多個副本。通常只有主副本提供讀寫服務。當主副本失效時,卡夫卡會選擇新副本作為主副本,在控制者的管理下提供讀寫服務。
跟隨者:從副本。與主副本相比,從副本只同步主副本的數據,不提供讀寫服務。
記錄:用kafka寫的消息,每個消息包含密鑰、值和時間戳。
生產者-消費者是壹種設計模式,就是在生產者和消費者之間增加壹個中間件,達到解耦的目的。
Zookeeper是壹個成熟的分布式協調服務,可以為分布式服務提供分布式配置服務、同步服務和名稱註冊。任何分布式服務都需要壹種方法來協調任務。Kafka使用Zookeeper來協調任務,其他壹些技術也有自己內置的任務協調機制。
Kafka在Zookeeper上存儲代理、主題和分區的元數據。
卡夫卡使用Zookeeper完成以下功能:
控制器從經紀人中選出,負責分區領導和跟隨者的管理。當分區的領導者副本改變時,控制器負責為分區選擇新的領導者副本。當壹個分區的同步副本集發生變化時,控制器負責通知所有代理更新元數據信息。
控制者的選舉依賴於Zookeeper,成功當選控制者的經紀人會在Zookeeper中創建壹個/controller的臨時節點。
選舉過程:代理首先嘗試讀取/Controller節點中的Brokerid值。如果brokerid值不為-1,則表示該經紀人已被選為控制人;否則,它會嘗試創建/controller節點,並在成功創建後將當前brokerid作為activeControllerId寫入/controller節點。
主要職責:controller被選為整個Broker集群的管理者,管理所有的集群信息和元數據。
Kafka的網絡通信模型是基於NIO的Reactor多線程模型設計的。它包含壹個用於處理連接的接收器線程,多個用於選擇和讀取套接字請求的處理器線程,以及壹個包含多個用於處理請求和響應的處理程序的處理器線程。
順序寫入:
零拷貝:
Pagecache:當生產者向代理生成消息時,代理將使用pwrite()系統調用在偏移量處寫入數據。寫入時,將首先寫入頁面緩存。當消費者消費消息時,代理將使用sendfile()系統調用將數據從頁面緩存傳輸到代理的套接字緩沖區,然後通過網絡傳輸。所以當卡夫卡的生產速率和消費速率相差不大的時候,幾乎只需要讀寫頁面緩存就可以完成整個生產-消費過程,磁盤訪問非常少。
網絡模型:Kafka基於NIO和Reactor線程模型實現了自己的RPC通信。壹個接受者線程處理新的連接,多個處理器線程選擇和讀取套接字請求,多個處理者線程處理請求和響應(I/O多路復用)。
批量和壓縮:Kafka Producer不是壹條壹條的給Broker發送消息,而是批量發送。此外,生產者、經紀人和消費者使用相同的壓縮算法。生產者向Broker寫入數據時,消費者甚至可以不經過解壓直接從Broker讀取數據,最後在消費者Poll收到消息時解壓,節省了大量的網絡和磁盤開銷。
Paritition並發:Kafka的題目可以分成多個分區,每個奇偶都類似於壹個隊列,保證數據順序。同壹組中的不同消費者並發地消費分區,分區實際上是優化Kafka並行性的最小單位。因此,可以說每增加壹個分區就增加壹個消費並發。
文件結構:
卡夫卡的消息是按主題分類的,每個主題都是相互獨立,互不影響的。每個主題可以分成壹個或多個部分。每個分區都有壹個記錄消息數據的日誌文件。
Kafka每個分區日誌根據大小在物理上被分成多個段。
索引使用稀疏索引,因此每個索引文件的大小是有限的。Kafka使用mmap將索引文件直接映射到內存中,因此index的操作不需要操作磁盤IO。
卡夫卡充分利用二分法尋找偏移對應的信息位置。
Kafka與其他消息隊列相比有什麽優勢?
妳了解排隊模型嗎?卡夫卡的消息模型知道嗎?
卡夫卡是如何保證消息不被重復消費的?
卡夫卡中反復消費信息的原因:
解決方案:
參考1:卡夫卡表演:卡夫卡為什麽這麽“快”?
參考文獻2:卡夫卡原理:舉例說明kakfa建築的原理