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:就是籃子了。