Kafka學習 簡介

2021-09-09 02:29:37 字數 2689 閱讀 7653

kafka是由linkedin開發的乙個分布式的訊息系統,使用scala編寫,它以可水平擴充套件和高吞吐率而被廣泛使用。目前越來越多的開源分布式處理系統如cloudera、apache storm、spark都支援與kafka整合。

kafka是乙個訊息系統,原本開發自linkedin,用作linkedin的活動流(activity stream)和運營資料處理管道(pipeline)的基礎。現在它已被作為多種型別的資料管道和訊息系統使用。

活動流資料是幾乎所有站點在對其**使用情況做報表時都要用到的資料中最常規的部分。活動資料報括頁面訪問量(page view)、被檢視內容方面的資訊以及搜尋情況等內容。這種資料通常的處理方式是先把各種活動以日誌的形式寫入某種檔案,然後周期性地對這些檔案進行統計分析。運營資料指的是伺服器的效能資料(cpu、io使用率、請求時間、服務日誌等等資料)。

kafka作為乙個集群執行在乙個或多個伺服器上,

kafka集群儲存的訊息是以topic為類別記錄的,

每個訊息(也叫記錄record,我習慣叫訊息)是由乙個key,乙個value和時間戳構成。

topic是生產者生產訊息的類別,訊息根據不同的topic被儲存到不同的partition,乙個topic中的訊息可以被儲存到多個partition,kafka為每乙個分割槽都維護了乙個log.

每乙個分割槽都是乙個有序的、不可變的訊息佇列, 並且可以持續的新增。分割槽中的訊息都被分了乙個序列號,稱之為偏移量(offset),offset在每個分割槽中此偏移量都是唯一的。

kafka集群保持所有的訊息,直到它們過期, 無論訊息是否被消費了。 消費者所持有的僅有的元資料就是偏移量,也就是消費者在這個log中的位置。 這個偏移量由消費者控制:當消費者消費訊息的時候,偏移量也會隨著訊息的消費不但增加。但消費者可以將偏移量重置為更老的乙個偏移量,重新讀取訊息,並且多個消費者對於訊息的消費互不影響。 

log的分割槽被分布到集群中的多個伺服器上。每個伺服器處理它分到的分割槽。 根據配置每個分割槽還可以複製到其它伺服器作為備份容錯。 每個分割槽有乙個leader,零或多個follower。leader處理此分割槽的所有的讀寫請求,而follower被動的複製資料。如果leader宕機,其它的乙個follower會被推舉為新的leader。 一台伺服器可能同時是乙個分割槽的leader,另乙個分割槽的follower。 這樣可以平衡負載,避免所有的請求都只讓一台或者某幾台伺服器處理。

生產者往某個topic上發布訊息。生產者也負責選擇發布到topic上的哪乙個分割槽。最簡單的方式從分割槽列表中輪流選擇,也可以根據某種演算法依照權重選擇分割槽。開發者負責如何選擇分割槽的演算法。

通常來講,訊息系統的模型可以分為兩種, 佇列和發布-訂閱式。 佇列模型的處理方式是一組消費者從伺服器讀取訊息,一條訊息只有其中的乙個消費者來處理;發布-訂閱模型中,訊息被廣播給所有的消費者,接收到訊息的消費者都可以處理此訊息。kafka為了充分利用佇列模型和發布-訂閱模型的優點提出了consumer group概念。 消費者用乙個消費者組名標識。 乙個發布在topic上訊息被分發給此消費者組中的乙個消費者。 如果的消費者都在乙個消費者組中,就變成了queue模型;如果所有的消費者都在不同的組中,那麼就完全變成了發布-訂閱模型。消費者組作為邏輯上的訂閱者,可以包含數目不等的消費者。 乙個組內多個消費者可以用來擴充套件效能和容錯,多個消費者組可以增強訊息的併發處理能和擴充套件性。

傳統的佇列模型保持訊息,並且保證它們的先後順序不變。儘管伺服器保證了訊息的順序,訊息還是非同步的傳送給各個消費者,消費者收到訊息的先後順序不能保證了。這也意味著並行消費將不能保證訊息的先後順序,但是如果只讓乙個消費者處理訊息,又違背了並行處理的初衷。 kafka採用了一種分而治之的策略:分割槽。 因為topic分割槽中訊息只能由消費者組中的唯一乙個消費者處理,所以訊息肯定是按照先後順序進行處理的。但是它也僅僅是保證topic的乙個分割槽順序處理,不能保證跨分割槽的訊息先後處理順序。 所以,如果你想要順序的處理topic的所有訊息,那就只提供乙個分割槽。但是需要主要:相同消費者組中的消費者數量不能比分區的數量更多,否則多出的消費者將會處於等待狀態,不處理訊息。

傳統的訊息有兩種模式:佇列和發布訂閱。 佇列的優點是允許多個消費者並行處理資料,這樣可以根據訊息的生產速度增加和減少消費者數量,便於擴充套件。但是佇列不像多個訂閱者,一旦訊息者程序讀取後故障了,那麼訊息就丟了;發布-訂閱模式將訊息廣播到多個消費者,由於每個訂閱者都訂閱和處理訊息,所以沒有辦法做並行處理。

kafka中消費者組有兩個概念:佇列,消費者組(consumer group)允許同名的消費者組成員瓜分處理。發布訂閱:允許你廣播訊息給多個消費者組(不同名)。

kafka的每個topic都具有這兩種模式。

所有發布訊息到訊息佇列和消費分離的系統,實際上都充當了乙個儲存系統(發布的訊息先儲存起來)。kafka比別的系統的優勢是它是乙個非常高效能的儲存系統。

寫入到kafka的資料將寫到磁碟並複製到集群中保證容錯性。並允許生產者等待訊息應答,直到訊息完全寫入。

kafka的磁碟結構 - 無論你伺服器上有50kb或50tb,執行效率是相同的。

client來控制讀取資料的位置。你還可以認為kafka是一種專用於高效能,低延遲,提交日誌儲存,複製,和傳播特殊用途的分布式檔案系統。

kafka詳解一 Kafka簡介

分類 kafka 2014 08 18 10 45 375人閱讀收藏 舉報 背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 如何收集這些巨大的資訊 如何分析它 如何及時做到如上兩點 以上幾個挑戰形成了乙個業務需求模型,即生...

kafka入門簡介

1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...

KAFKA原理簡介

每條訊息在檔案中的位置成為offset 偏移量 offset為long型數字。過後無論是否被消費,都會被清楚。consumer儲存消費資訊的offset。kafka通過partition將日誌內容分散到多個server上,每個partition都會被 當前server儲存,kafka可以配置part...