消息系統(tǒng)概述
最近開始學(xué)習(xí)Kafka。在學(xué)習(xí)前,給自己確定了下學(xué)習(xí)的范圍,大致如下:
理解Kafka的相關(guān)概念; 掌握Kafka的基本API使用; 了解Kafka的背后原理。
后續(xù)將在這學(xué)習(xí)范圍內(nèi)輸出一些相關(guān)文章。那么本文作為Kafka系列的第一篇文章,將從“理解Kafka的相關(guān)概念”說起。首先Kafka是什么。
Kafka起初是由LinkedIn公司采用Scala語言開發(fā)的一個(gè)多分區(qū)、多副本且基于ZooKeeper協(xié)調(diào)的分布式消息系統(tǒng),現(xiàn)已被捐獻(xiàn)給Apache基金會(huì)。目前Kafka已經(jīng)定位為一個(gè)分布式流式處理平臺(tái),它以高吞吐、可持久化、可水平擴(kuò)展、支持流數(shù)據(jù)處理等多種特性而被廣泛使用。
從上述介紹中,我們可以知道Kafka具有消息系統(tǒng)和流式處理平臺(tái)兩種角色。為了更好的理解Kafka,本文將對(duì)消息系統(tǒng)進(jìn)行介紹。
消息系統(tǒng)
消息系統(tǒng),又被稱作消息中間件。現(xiàn)在聽到較多的是消息隊(duì)列(MQ)的叫法,算是消息中間件的一種簡(jiǎn)稱,其實(shí)都是同樣的意思。那么消息系統(tǒng)是什么。
看一個(gè)我們都熟悉的場(chǎng)景——電子郵件。我們發(fā)送電子郵件,實(shí)際上就是將一個(gè)郵件文件從我們的電腦轉(zhuǎn)發(fā)到對(duì)方電腦上,但是我們?cè)诎l(fā)送的時(shí)候,并不需要關(guān)心對(duì)方的電腦是否開著,只管發(fā)送就好,郵件會(huì)先被發(fā)送到郵件服務(wù)器上,然后當(dāng)對(duì)方電腦開機(jī)時(shí),再從郵件服務(wù)器上獲取郵件。郵件服務(wù)器就是一個(gè)消息系統(tǒng),可暫存應(yīng)用之間通信所發(fā)送的消息。而這樣能帶來的好處也顯而易見了,作為發(fā)送消息的生產(chǎn)者并不需要關(guān)心接收消息的消費(fèi)者的狀態(tài),生產(chǎn)者只需確保將消息成功發(fā)送到消息系統(tǒng)即可,這是一種異步通信模式。

這種通信模式起到了解耦的作用,減少了生產(chǎn)者的職責(zé)。生產(chǎn)者只需關(guān)注生產(chǎn)消息和把消息發(fā)送到消息系統(tǒng),而消費(fèi)情況無需關(guān)注。
不僅如此,除上述我們描述的點(diǎn)對(duì)點(diǎn)(單消費(fèi)者)情況,我們還可以在生產(chǎn)者無感知的情況下,使用發(fā)布/訂閱模式。加入的新消費(fèi)者去訂閱主題,然后由消息系統(tǒng)廣播給所有訂閱的消費(fèi)者,這為系統(tǒng)的擴(kuò)展提供了便利。

而且通過異步能加快系統(tǒng)的響應(yīng)。例如一個(gè)下單操作,需要涉及優(yōu)惠券、積分和短信等系統(tǒng)的處理,如果使用同步則需要等所有系統(tǒng)都處理完,但這樣下單系統(tǒng)的響應(yīng)時(shí)間將大大增加。通過使用消息系統(tǒng),下單系統(tǒng)只需將下單操作的消息寫入,然后完成下單操作,響應(yīng)給用戶。至于優(yōu)惠券、積分、短信等將由相應(yīng)系統(tǒng)從消息系統(tǒng)中獲取下單操作消息進(jìn)行處理。

我們?cè)僭囅胂逻@樣的場(chǎng)景,當(dāng)下單系統(tǒng)接收的請(qǐng)求突增的時(shí)候,消息系統(tǒng)也能起到削峰/限流的作用,暫存消息,讓下游系統(tǒng)根據(jù)自身處理能力來處理消息,避免下游系統(tǒng)崩潰,系統(tǒng)也將更為穩(wěn)定。
關(guān)注的問題
通過上述的介紹,對(duì)消息系統(tǒng)有了一定的認(rèn)識(shí)。下面我們?cè)龠M(jìn)一步的思考下,消息系統(tǒng)的功能我們已經(jīng)知道了,如果讓我們使用一個(gè)消息系統(tǒng),需要關(guān)注哪些問題,以下是我所想到的一些:
可用性。如果消息系統(tǒng)掛了,那消費(fèi)的下游系統(tǒng)都將失效,所以需要保證可用性。 吞吐量。如果上游系統(tǒng)每秒百萬級(jí)的吞吐量,需要讓消息系統(tǒng)的寫入吞吐量與其匹配。同時(shí)也需關(guān)注下游系統(tǒng)消費(fèi)情況的吞吐量。 消息丟失。上游系統(tǒng)->消息系統(tǒng)->下游系統(tǒng),這兩個(gè)過程都有可能發(fā)生消息丟失。 消息順序。這個(gè)問題其實(shí)和消息丟失是同時(shí)存在的,由于消息的丟失,將造成消息順序的錯(cuò)亂。
在后續(xù)的學(xué)習(xí)中,將帶著這幾個(gè)問題,去看看Kafka是如何解決。
參考
《深入理解Kafka核心設(shè)計(jì)與實(shí)踐原理》
消息隊(duì)列的使用場(chǎng)景(https://www.zhihu.com/question/34243607/answer/1023686807)
什么是消息隊(duì)列(https://juejin.im/post/6844903817348136968)
消息隊(duì)列設(shè)計(jì)精要 (https://tech.meituan.com/2016/07/01/mq-design.html)
完
? ? ? ?
???覺得不錯(cuò),點(diǎn)個(gè)在看~

