什么是Kafka
這里我們采用Kafka官網(wǎng)的定義衷戈,Kafka是一個分布式流處理平臺。在Kafka中挤渐,客戶端和服務(wù)器使用一個簡單现柠、高性能院领、支持多語言的 TCP 協(xié)議https://kafka.apache.org/protocol.html。
簡單說够吩,它是一個消息系統(tǒng)比然,分布式消息是一種通信機制,和 RPC周循、HTTP强法、RMI 等不一樣,消息中間件采用分布式中間代理的方式進行通信湾笛,如下圖所示:
另外一個角度饮怯,從數(shù)據(jù)結(jié)構(gòu)上說,它是一個隊列嚎研,里面放的是消息蓖墅,我們把這個消息叫做Topic,Kafka 通過 Topic 對存儲的流數(shù)據(jù)進行分類临扮,我們把一個Topic稱為一個主題论矾。
一個Topic由Broker上的一個或者多個Partition構(gòu)成,可以把一個Partition想象成一個Log杆勇,消息通過追加的方式寫入Log贪壳。Partition內(nèi)部是保證了消息的順序的,Partition之間是不保證消息順序的蚜退,一個典型的包含三個Partition的結(jié)構(gòu)及消息寫入的描述如下圖:
這里寫入的每條記錄中包含一個key闰靴,一個value和一個timestamp(時間戳)。
Kafka可以作為一個集群钻注,運行在一臺或者多臺服務(wù)器上蚂且。
Kafka的使用場景
kafka可以說是在系統(tǒng)架構(gòu)中額外引入的一個組件,引入也是有開銷的幅恋,那我們什么時候需要引入他呢膘掰。他有如下幾個作用:
解耦
采用了消息中間件之后,上游業(yè)務(wù)系統(tǒng)發(fā)送消息,先存儲在消息中間件识埋,然后由消息中間件將消息分發(fā)到對應(yīng)的業(yè)務(wù)模塊應(yīng)用(分布式生產(chǎn)者 - 消費者模式)。這種異步的方式零渐,減少了服務(wù)之間的耦合程度窒舟。
冗余(也就是做存貯)
擴展
流量削峰
可恢復(fù)性
順序保證
緩沖
異步通信
有這些需求的時候可以考慮使用kafka。