Kafka 基礎概念及架構

2022-10-11 03:48:07 字數 3557 閱讀 9569

kafka是⼀個分布式、分割槽的、多副本的、多⽣產者、多訂閱者,基於zookeeper協調的分布式⽇志系統(也可以當做mq系統),常⻅可以⽤於web/nginx⽇志、訪問⽇志,訊息服務等等。

kafka主要應⽤場景:⽇志收集系統和訊息系統

kafka主要設計目標

kafka訊息傳遞模式:發布-訂閱模式(不支援點對點模式)

kafka訊息推拉模式:kafka只有訊息的拉取,沒有推送,可以通過輪詢實現訊息的推送

kafka在⼀個或多個可以跨越多個資料中⼼的伺服器上作為集群運⾏。

kafka集群中按照主題分類管理,⼀個主題可以有多個分割槽,⼀個分割槽可以有多個副本分割槽。

每個記錄由⼀個鍵,⼀個值和⼀個時間戳組成。

kafka 的 4 個核心 api

producer api:允許應⽤程式將記錄流發布到⼀個或多個kafka主題。

consumer api:允許應⽤程式訂閱⼀個或多個主題並處理為其⽣成的記錄流。

streams api:允許應⽤程式充當流處理器,使⽤⼀個或多個主題的輸⼊流,並⽣成⼀個或多個輸出主題的輸出流,從⽽有效地將輸⼊流轉換為輸出流。

connector api:允許構建和運⾏將kafka主題連線到現有應⽤程式或資料系統的可重⽤⽣產者或使⽤者。例如,關聯式資料庫的聯結器可能會捕獲對錶的所有更改。

⾼吞吐量:單機每秒處理⼏⼗上百萬的訊息量。即使儲存了許多tb的訊息,它也保持穩定的效能。

⾼效能:單節點⽀持上千個客戶端,並保證零停機和零資料丟失。

持久化資料儲存:將訊息持久化到磁碟。通過將資料持久化到硬碟以及replication防⽌資料丟失。

分布式系統:易於向外擴充套件。所有的producer、broker和consumer都會有多個,均為分布式的。⽆需停機即可擴充套件機器。多個producer、consumer可能是不同的應⽤。

可靠性:kafka是分布式,分割槽,複製和容錯的。

客戶端狀態維護:訊息被處理的狀態是在consumer端維護,⽽不是由server端維護。當失敗時能⾃動平衡。

⽀持online和offline的場景

⽀持多種客戶端語⾔:kafka⽀持j**a、.net、php、python等多種語⾔。

訊息和批次

訊息:批次:

模式

主題和分割槽

生產者和消費者

生產者:

消費者:

broker和集群

集群中乙個分割槽屬於乙個 broker,該broker稱為分割槽首領

乙個分割槽可以分配給多個broker,此時會發生分割槽複製。分割槽複製提供了訊息冗餘和高可用。副本分割槽不負責處理訊息的讀寫

5.1 生產者 producer

生產者建立訊息,將訊息發布到主題(topic)中。一般乙個訊息會被發布到指定的主題上,然後通過以下幾種方式發布到指定主題分割槽:

5.2 消費者 consumer

消費者從主題中讀取訊息

消費者是消費組的一部分。消費組保證每個分割槽只能被乙個消費者使用

如果某乙個消費者失效,就會進行再平衡,重新給消費組中的消費者分配消費分割槽,以達到高可用的目的

5.3 伺服器 broker

乙個獨立的kafka伺服器就是乙個 broker。broker為消費者提供服務,對讀取分割槽的請求做出響應,返回已經提交到磁碟上的訊息。

broker 是集群的組成部分。每個集群都有⼀個broker 同時充當了集群控制器的⻆⾊(⾃動從集群的活躍成員中選舉出來):

在集群中,⼀個分割槽從屬於⼀個broker,該broker 被稱為分割槽的⾸領

5.4 主題 topic

每條發布到kafka的訊息都有乙個類別,這個類別就是topic。

5.5 分割槽 partition

主題可以分為若干個分割槽,訊息可以寫主題的某乙個分割槽中。

訊息以追加的方式寫入分割槽,然後以先進後出的方式被讀取。

kafka 無法在整個主題範圍內保證訊息的順序,但是可以保證訊息在單個分割槽中的順序。

kafka 通過分割槽實現資料冗餘和伸縮性。

在需要嚴格保證訊息順序的情況下,需要將分割槽設定為 1 。

5.6 副本 replicas

5.6.1 副本概念

訊息被寫入主題,每個主題有多個分割槽,每個分割槽有多個副本。副本被儲存在broker 上,每個broker 可以儲存成百上千個屬於不同主題和分割槽的副本

副本有兩種型別:

5.6.1 副本介紹

kafka 通過副本保證高可用。副本分為⾸領副本(leader)和跟隨者副本(follower)。

跟隨者副本包括同步副本和不同步副本,在發⽣⾸領副本切換的時候,只有同步副本可以切換為⾸領副本。

ar

分割槽中的所有副本統稱為ar(assigned repllicas)。ar=isr+osr

isr

osr

hw

hw是high watermak的縮寫, 俗稱⾼⽔位,它表示了⼀個特定訊息的偏移量(offset),消費之只能拉取到這個offset之前的訊息。

leo

leo是log end offset的縮寫,它表示了當前⽇志⽂件中下⼀條待寫⼊訊息的offset。

5.7 偏移量 offset

5.7.1 生產者 offset

訊息寫⼊的時候,每⼀個分割槽都有⼀個offset,這個offset就是⽣產者的offset,同時也是這個分割槽的最新最⼤的offset

有些時候沒有指定某⼀個分割槽的offset,這個⼯作kafka幫我們完成

5.7.2 消費者 offset

這是某⼀個分割槽的offset情況,⽣產者寫⼊的offset是最新最⼤的值是12,⽽當consumer a進⾏消費時,從0開始消費,⼀直消費到了9,消費者的offset就記錄在9,consumer b就紀錄在了11。等下⼀次他們再來消費時,他們可以選擇接著上⼀次的位置消費,當然也可以選擇從頭消費,或者跳到最近的記錄並從「現在」開始消費。

Kafka基礎 Kafka架構

目錄kakfa 架構 kafka最初是由linkedin公司採用scala語言開發的乙個多分割槽 多副本並且基於zookeeper協調的分布式訊息系統,現在已經捐獻給了apache 會。目前kafka已經定位為乙個分布式流式處理平台,它以 高吞吐 可持久化 可水平擴充套件 支援流處理等多種特性而被廣...

Impala之概念及架構

impala伺服器是乙個分布式,大規模並行處理 mpp 資料庫引擎。它包括執行在cdh集群主機上的不同後台程序。1,客戶端 有三類客戶端可以與impala進行互動 基於驅動程式的客戶端 odbc driver和jdbc driver,其中jdbc driver支援hive1與hive2風格的驅動形式...

Impala概念及架構解析

impala伺服器是乙個分布式 大規模並行處理 mpp 資料庫引擎。執行在集群每個節點上的守護程序,名稱為impalad。負責讀寫資料檔案 接受查詢請求,將查詢結果返回給中心協調者節點。statestore搜尋集群中impalad程序節點的健康狀態,並不斷將健康狀態的結果 給所有的impalad程序...