前言:老劉今天寫這篇文章首先想對一些複製粘貼的博客表達不滿;其次是想用通俗易懂的話解釋消息系統;最後歡迎各位英雄好漢、女中豪傑前來battle。ide
今天覆習kafka知識點的第一個問題是:爲何有消息系統?可能有不少自學大數據開發的人都不怎麼注意這個問題,但老劉但願可以用這個小問題來提醒自學大數據開發的人,即便再小的問題,它都有很大的細節,對每一個知識點造成本身的理解真的很重要!!!大數據
在這個問題上,某機構的資料是這樣回答的:翻譯
看到答案的我表情是這樣的!3d
原諒老劉是個木魚腦殼,明明問的是爲何,可這個內容回答的是消息系統有什麼用,而且對於每一個用處的解釋,老劉以爲太專業了,實在不能用本身的理解把它們解釋出來!中間件
因而,老劉帶着疑問去搜了這個問題的相關答案,不查不知道,一查嚇一跳,絕大多數的人都是這樣的回答,內容和排版都差很少,基本都是複製粘貼別人的內容。(抄別人的東西有意思嘛)blog
老劉如今不得不感慨,在網上找到一個好的答案真的太難了,真正用本身的理解回答問題的人太難找了!接口
那這個小問題最後是如何解決的呢?開發
老劉在某天飯點忽然一激靈,終於明白了爲何和有什麼用這兩個實際上是能夠相互轉換的!kafka
在這個靈感下,老劉結合網上大佬的內容,對爲何會有kafka消息系統給出了這樣的答案。博客
首先爲何有kafka消息系統這個問題,要先回答爲何會有消息系統,由於kafka是消息系統的一個實現。
老劉舉例說明一下爲何有消息系統,對消息系統的用處進行形象的解釋。
這是第一個例子:
在巧克力的生產過程當中,研磨車間把可可豆變成可可粉,再人工傳輸到加熱車間變爲巧克力醬,在人工搬到罐裝車間,經過巧克力模型,變爲各類形狀的巧克力。可是呢,人工搬運有點慢,咱們就引入了傳送帶,省掉人工搬運過程。
接着又發現問題,每一個車間生產效率是不同的,研磨車間賊快,加熱車間慢,而罐裝車間也快。在這種狀況下,研磨車間產生的東西太多了,加熱車間忙不過來,這個時候就能夠設置一個倉庫。
這個倉庫就至關於咱們的消息系統,俗稱消息中間件,起到一個緩衝的做用,能夠作到削峯填谷。
也至關於送快遞,當快遞到了,我如今沒有時間來取,快遞員就把快遞放在附件的超市裏,等我有空了就去取。
以上就是消息系統具備的緩衝、削峯填谷功能。
如今講述第二個例子:
傳統模式下,當用戶下單後,訂單系統須要通知庫存系統,其實就是調用庫存系統的接口。可是,當庫存系統出現故障,沒法訪問的時候,訂單減庫存就是失敗,致使訂單失敗,這就是訂單系統和庫存系統耦合。
那咱們怎麼辦呢?
優秀的開發人員引入了消息系統,用戶下單後,訂單系統完成持久化處理,將消息寫入消息系統,返回用戶下單成功。而後庫存系統採用拉/推的方式,獲取下單信息,庫存系統就會根據下單信息,進行庫存操做。經過這樣的方式,訂單系統就和庫存系統成功解耦,這就是消息系統的解耦合功能。
因爲某些機構的資料以及不少博客的答案都比較具備專業性,老劉實在難以理解,沒法用本身的話解釋出來。
因而,老劉結合了不少例子對消息系統的用處進行了形象的解釋,對爲何會有消息系統這個問題也有了大體的答案。對於這個小問題終於能有本身的理解了,不容易啊!
總結一下,對於爲何有消息系統這個問題,咱們能夠有這樣的理解。
在實際開發過程當中,經常有各類千奇百怪需求,突發狀況也隨時可能發生,好比應用流量暴增、應用崩潰等,爲了解決這些狀況,優秀的開發人員實現各類消息系統,好比RabbitMQ、RocketMQ、kafka,這些消息系統基本都會有解耦、緩衝、削峯填谷等功能,經過這些功能能夠幫助咱們在平常開發過程當中來應對這些問題。若是時間容許,能夠在對每一個功能舉例說明!
老劉之前寫博客,純粹就是分享自學大數據開發的細節知識點,讓一樣是自學的夥伴查漏補缺。
今天的博客有多個目的,老劉寫了一個列表以下:
最後,若是有任何遺漏或者錯誤的地方,聯繫公衆號:努力的老劉,歡迎各位英雄好漢、女中豪傑前來批評和指點!