Kafka是一個分布式消息隊列,具有高性能、持久化、多副本、橫向擴展能力。生產(chǎn)者往隊列里寫消息,消費者從隊列里取消息進行業(yè)務(wù)邏輯。一般在架構(gòu)設(shè)計中起到解耦、削峰、異步處理的作用。
Kafka對外使用topic概念,生產(chǎn)者往topic里寫消息,消費者從topic中讀消息。為了做到水平擴展,一個topic實際是由多個partition組成的,遇到瓶頸時,可以通過partition的數(shù)量來進行橫向擴容。Kafka的數(shù)據(jù)是按照一定順序持久化保存,單個partition內(nèi)是保證消息有序。
Broker: 一個獨立的Kafka服務(wù)器被稱為Broker。Broker接收來自生產(chǎn)者的消息,為消息設(shè)置偏移量,并提交消息到磁盤保存。broker為消費者提供服務(wù),對讀取分區(qū)的請求作出響應(yīng),返回已經(jīng)提交到磁盤上的消息,
Topic: 主題,消息源。Kafka的消息按照主題進行分類。主題好比數(shù)據(jù)庫的表,或者文件系統(tǒng)里的文件夾。主題可以被分為若干個分區(qū),即一個表中有多個列,或者一個文件系統(tǒng)的文件夾中有多個文件。
Partition: 分區(qū),一個分區(qū)就是一個提交日志,消息以追加的方式寫入分區(qū),然后以先入先出的順序讀取。由于一個主題一般包含多個分區(qū),因此,無法在整個主題范圍內(nèi)保證消息的順序,但是,可以保證消息在單個分區(qū)內(nèi)的順序。
Producer : 生產(chǎn)者,創(chuàng)建消息。默認情況下,把消息均衡地分不到主題的所有分區(qū)上,而并不關(guān)心特定消息會被寫到哪個分區(qū);某些情況下,生產(chǎn)者會把消息直接寫到指定的分區(qū),通過消息鍵和分區(qū)器來實現(xiàn),分區(qū)器為建生成一個散列值,并將其映射到指定的分區(qū)上。
Consumer: 消費者,讀取數(shù)據(jù)。消費者訂閱一個或多個主題,并按照消息生成的順序讀取它們。消費者通過檢查消息的偏移量來區(qū)分已經(jīng)讀取過的消息。
ConsumerGroup: 消費者組,可以并行消費主題中的分區(qū)的消息的消費者組合。
偏移量: 偏移量是一個不斷遞增的整數(shù)值,在創(chuàng)建消息時,Kafka會把它添加到消息里。在給定的分區(qū)里,每個消息的偏移量都是唯一的。消費者把每個分區(qū)最后讀取的消息偏移量保存在zookeeper或Kafka上,如果消費者關(guān)閉或重啟,他的讀取狀態(tài)不會丟失。
Message: 消息,通信的基本單位,每個producer可以向一個主題發(fā)布一些消息。Message是以主題為基本單位組織的。Message包含三個屬性,分別為offset、MessageSize和data。
Producers: 消息和數(shù)據(jù)生成者,向Kafka的一個topic發(fā)布消息的過程叫做producers 。
Consumers: 消息和數(shù)據(jù)消費者,訂閱topic并處理其發(fā)布的消息的過程叫做consumers。