1. 程式人生 > >大資料學習之路93-kafka簡介

大資料學習之路93-kafka簡介

kafka是實時計算中用來做資料收集的,它是一個訊息佇列。它使用scala開發的。

那麼我們就會想我們這裡能不能用hdfs做資料儲存呢?它是分散式的,高可用的。

但是它還缺少一些重要的功能:比如說我們往hdfs中寫資料,之後我們需要實時的讀取。當我們讀到某一行的時候斷掉了,假如說這個讀取是消費者的消費,這樣突然的宕機,重啟之後就需要,重新讀取之前的檔案,可是這個檔案我們之前已經讀取了一部分。這樣就會造成重複消費。

kafaka就會好一點,它有偏移量,我們消費到哪裡,他就會記錄到哪裡。

所以kafka幾乎是實時計算的標配,它就是用來做資料的暫時儲存。

簡單說明什麼是Kafka:

舉個例子,生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產一個雞蛋,                   消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統宕機了),生產者還在生                     產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁(大交易量的情況),生產者1                                              秒鐘生產100 個雞蛋,消費者1 秒鐘只能吃50 個雞蛋,那要不了一會,消費者就吃不消了

(訊息堵塞,最終導致系統超時),消費者拒絕再吃了,”雞蛋“又丟失了,這個時候我們

放個籃子在它們中間,生產出來的雞蛋都放到籃子裡,消費者去籃子裡拿雞蛋,這樣雞蛋就                    不會丟失了,都在籃子裡,而這個籃子就是”Kafka“。

雞蛋其實就是“資料流”,系統之間的互動都是通過“資料流”來傳輸的(就是tcp、http

什麼的),也稱為報文,也叫“訊息”。

訊息佇列滿了,其實就是籃子滿了,”雞蛋“ 放不下了,那趕緊多放幾個籃子,其實就是

Kafka 的擴容。Kafka 就是例子中的"籃子"。

Apache Kafka 與傳統訊息系統相比,有以下不同:

  1. 它是分散式系統,易於向外擴充套件;
  2. 它同時為釋出和訂閱提供高吞吐量;
  3. 它支援多訂閱者,當失敗時能自動平衡消費者;
  4. 它將訊息持久化到磁碟,因此可用於批量消費,例如 ETL,以及實時應用程式

 

基本概念解釋:

  • producer產者,就是它來生產“雞蛋”的。
  • consumer消費者,生出的“雞蛋”它來消費
  • topic:把它理解為標籤,生產者每生產出來一個雞蛋就貼上一個標籤(topic),消費者                                                       可不是誰生產的“雞蛋”都吃的,這樣不同的生產者生產出來的“雞蛋”,消費者就可                   以選擇性的“吃”了。
  • broker就是籃子了

如果從技術角度,topic標籤實際就是佇列,生產者把所有“雞蛋(訊息)”都放到對應的佇列裡了,消費者到指定的佇列裡取。