kafka 簡介
kafka 是一個為事件流而生的分散式訊息系統,廣泛應用於網頁使用者記錄跟蹤,IOT 裝置,日誌採集,系統監控等場景。
kafka 是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast(變態快)等優點,並已在成千上萬家公司執行。
例子
舉個例子,大部分現代人都刷過抖音、b 站、淘寶,都知道這些應用 app 有個特點就是推薦演算法,你瀏覽的越多,它們越知道你對什麼感興趣。推薦演算法如果離開了使用者行為資料,也就是使用者的瀏覽記錄,那麼就像是巧婦難為無米之炊,需要有資料的支撐才能讓推薦演算法發揮出它的效果。
那麼,有什麼實現方式呢,無非就是以下幾種,使用者點選一下,演算法接到一個請求,進行分析,然後輸出相關推薦。
這種方式是不可能的,為什麼呢,一是一個點選一個點選的資料量太少,除非做下儲存,然後隔一段事件批量拉取做分析,二是對演算法系統壓力太大,萬一使用者請求太多了,容易打爆演算法系統。還有一種就是接入訊息中介軟體,就像 kafka,使用者點選一下,生產者(這裡可以是 app 或者相應查詢內容的後端服務)傳送一個事件到 kafka 伺服器(專業術語是 broker),然後就不管了,這時候演算法系統(消費者)拉取資料,進行實時或者離線分析,就算你高峰期使用者請求再多,有 broker 在,最多就是訊息擠壓,我慢慢消費就行了,總有一天消費得完,分析完再反哺使用者,然後使用者再點選,再分析,再反哺,造成一個迴圈,這個迴圈進行的多了,使用者的興趣愛好就暴露的越明顯,這也就是越刷越停不下來的原因。(大家要少刷啊!多讀書!少看抖音)。
可能大家還有個疑惑,既然你請求多了會打爆演算法系統,那麼為什麼不會打爆 broker 呢,這就設計到 kafka 的橫向擴容特性了,縱使你資料再多,我加機器,加分割槽解決。
還是例子
再舉個例子,是從kafka 中文教程看到的,很生動形象(做下推薦,這個是為大佬翻譯了 kafka 官方文件,並且一直在維護,nb!yyds!)。
生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產一個雞蛋,消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統當機了),生產者還在生產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能吃50個雞蛋,那要不了一會,消費者就吃不消了(訊息堵塞,最終導致系統超時),消費者拒絕再吃了,”雞蛋“又丟失了,這個時候我們放個籃子在它們中間,生產出來的雞蛋都放到籃子裡,消費者去籃子裡拿雞蛋,這樣雞蛋就不會丟失了,都在籃子裡,而這個籃子就是”kafka“。
雞蛋其實就是“資料流”,系統之間的互動都是通過“資料流”來傳輸的(就是tcp、https什麼的),也稱為報文,也叫“訊息”。
訊息佇列滿了,其實就是籃子滿了,”雞蛋“ 放不下了,那趕緊多放幾個籃子,其實就是kafka的擴容。
各位現在知道kafka是幹什麼的了吧,它就是那個"籃子"。
名詞解釋
後面大家會看到一些關於kafka的名詞,比如topic、producer、consumer、broker,我這邊來簡單說明一下。
-
producer:生產者,就是它來生產“雞蛋”的。
-
consumer:消費者,生出的“雞蛋”它來消費。
-
topic:你把它理解為標籤,生產者每生產出來一個雞蛋就貼上一個標籤(topic),消費者可不是誰生產的“雞蛋”都吃的,這樣不同的生產者生產出來的“雞蛋”,消費者就可以選擇性的“吃”了。
-
broker:就是籃子了。