kafka 是乙個分布式的基於 發布/訂閱模式 的流式平台,主要應用於大資料實時處理領域。
它有三個關鍵能力:
1.訂閱發布記錄流,它類似於企業中的訊息佇列 或 企業訊息傳遞系統
2.以容錯的方式儲存記錄流
3.實時記錄流
kafka 的應用
kafka 可以建立流資料管道,可靠性的在系統或應用之間獲取資料。
建立流式應用傳輸和響應資料。
kafka 作為訊息系統
kafka 作為訊息系統,它有三個基本元件
kafka 作為乙個高度可擴充套件可容錯的訊息系統,有很多 kafka 專屬的概念
topic(主題)
在 kafka 中,使用乙個類別屬性來劃分訊息的所屬類,劃分訊息的這個類稱為 topic。topic 相當於訊息的分配標籤,是乙個邏輯概念。主題好比是資料庫的表,或者檔案系統中的資料夾。
partition(分割槽)
topic 中的訊息被分割為乙個或多個的 partition,它是乙個物理概念,對應到系統上的就是乙個或若干個目錄,乙個分割槽就是乙個提交日誌。訊息以追加的形式寫入分割槽,先後以順序的方式讀取。
注意:由於乙個主題包含無數個分割槽,因此無法保證在整個 topic 中有序,但是單個 partition 分割槽可以
保證有序。訊息被迫加寫入每個分割槽的尾部。kafka 通過分割槽來實現資料冗餘和伸縮性
分割槽可以分布在不同的伺服器上,也就是說,乙個主題可以跨越多個伺服器,以此來提供比單個伺服器更強大的效能。
同乙個分割槽只能被同乙個組裡的消費者消費。
分割槽的原因:
方便在集群中擴充套件:提高某乙個topic的負載均衡,從而提高吞吐量。
提高併發
分割槽原則:
我們需要將producer傳送的資料封裝成乙個producerrecord物件。
指明partition 的情況下,直接將指明的值直接作為partiton 值;
沒有指明partition 值但有key的情況下,將key的hash 值與topic 的partition 數進行取餘得到partition 值;
既沒有partition 值又沒有key值的情況下,第一次呼叫時隨機生成乙個整數(後面每次呼叫在這個整數上自增),將這個值與topic 可用的partition總數取餘得到partition 值,也就是常說的round-robin 演算法。
segment(段)
kafka採取分片和索引機制,將 partition 進一步細分為若干個 segment,每個 segment 檔案的大小相等。每個segment對應兩個檔案:「.index」檔案和「.log」檔案。index檔案中儲存了索引和偏移量(offset),每一條資料的大小是固定的,log檔案儲存了具體的資料,會根據index中索引對應的偏移量找到log中對應的資料。
broker(伺服器)
kafka 集群包含乙個或多個伺服器,每個 kafka 中伺服器被稱為 broker,乙個broker可以容納多個topic。broker 接收來自生產者的訊息,為訊息設定偏移量,並提交訊息到磁碟儲存。broker 為消費者提供服務,對讀取分割槽的請求作出響應,返回已經提交到磁碟上的訊息。
broker 是集群的組成部分,每個集群中都會有乙個 broker 同時充當了集群控制器(leader)的角色,它是由集群中的活躍成員選舉出來的。每個集群中的成員都有可能充當 leader,leader 負責管理工作,包括將分割槽分配給 broker 和監控 broker。集群中,乙個分割槽總屬於乙個 leader,但是乙個分割槽可以分配給多個 broker(非leader),這時候會發生分割槽複製。這種複製的機制為分割槽提供了訊息冗餘,如果乙個 broker 失效,那麼其他活躍使用者會重新選舉乙個 leader 接管。
producer(生產者)
生產者,即訊息的發布者,其會將某 topic 的訊息發布到相應的 partition 中。生產者在預設情況下把訊息均衡地分布到主題的所有分割槽上,而並不關心特定訊息會被寫到哪個分割槽。不過,在某些情況下,生產者會把訊息直接寫到指定的分割槽。
consumer(消費者)
消費者,即訊息的使用者,乙個消費者可以消費多個 topic 的訊息,對於某乙個 topic 的訊息,其只會消費同乙個 partition 中的訊息。
consumer group (cg)(消費者組)
由多個consumer組成。消費者組內每個消費者負責消費不同分割槽的資料,乙個分割槽只能由乙個組內消費者消費;消費者組之間互不影響。所有的消費者都屬於某個消費者組,即消費者組是邏輯上的乙個訂閱者。
replica(副本)
為保證集群中的某個節點發生故障時,該節點上的partition資料不丟失,且kafka仍然能夠繼續工作,kafka提供了副本機制,乙個topic的每個分割槽都有若干個副本,乙個leader和若干個follower。副本數是乙個broker中leader和follower的總和。
消費者多於partition
即同乙個partition內的訊息只能被同乙個組中的乙個consumer消費。當消費者數量多於partition的數量時,多餘的消費者空閒。
消費者少於和等於partition
訊息在同乙個組之間的消費者之間均分
多個消費者組
多個組都會消費同乙個訊息,消費情況按組的情況分別處理
kafka目錄導讀(入門到高階)
kafka是分布式發布 訂閱訊息系統。它最初由linkedin公司開發,之後成為apache專案的一部分。kafka是乙個分布式的,可劃分的,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料。kafka主要特點 問題kafka的吞吐量測試 測試生產速度和消費速度 kafka記憶體為6g 不能...
kafka啟動命令 Kafka入門
kafka是乙個高效能分布式訊息系統,今天就簡單介紹下基礎入門吧。tar xzf kafka 2.12 2.2.0.tgz cd kafka 2.12 2.2.0二 啟動伺服器kafka使用zookeeper,所以我們要先啟動zookeeper,可以使用安裝檔案裡面的啟動命令啟動乙個單節點的zook...
kafka入門簡介
1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...