kafka是分布式流處理平臺,可以對流式記錄發(fā)布和訂閱、存儲、立即處理等。
基本概念
- producer:消息生產(chǎn)者
- consumer:消息消費(fèi)者
- consumer group:消費(fèi)者組,一個消費(fèi)者組包含一個或多個消費(fèi)者實(shí)例,便于擴(kuò)展和容錯。如果所有的消費(fèi)者在同一個消費(fèi)者組中,消息記錄會負(fù)載均衡到每一個消費(fèi)者實(shí)例;如果所有消費(fèi)者實(shí)例在不同的消費(fèi)組中,每條消息會廣播到所有消費(fèi)者進(jìn)程。
- broker :kafka服務(wù)器,kafka集群就是由多個broker組成。一個broker可以容納多個topic。
- topic:數(shù)據(jù)主題。kafka保留所有發(fā)布的記錄,無論是否被消費(fèi),數(shù)據(jù)保留期限可配置。kafka只保證分區(qū)內(nèi)記錄是有序的,不保證主題中不同分區(qū)的順序。
-
partition:分區(qū)。一個topic可以分布在多個broker,一個topic可以分為多個partition,每個partition為一個隊列。便于擴(kuò)展。分區(qū)由一個leader和多個follower組成,生產(chǎn)者和消費(fèi)者操作的都是leader,follower負(fù)責(zé)同步leader,在leader發(fā)生為故障時,從中選舉出新的leader。一個partition只能被消費(fèi)者組的一個消費(fèi)者所消費(fèi),但是過個消費(fèi)組可以消費(fèi)同一個partition。
kafka_broker.png
四大核心API
- producer api發(fā)布消息 到一個或多個topic
- consumer api訂閱一個或多個topic,并處理產(chǎn)生的消息
- streams api允許應(yīng)用程序充當(dāng)處理器,從一個或多個topic獲取輸入流,并向一個或多個topic產(chǎn)生輸出流。
- connector api允許構(gòu)建可重用的生產(chǎn)者或消費(fèi)者,將kafka topic連接到已存在的應(yīng)用程序或數(shù)據(jù)系統(tǒng)。比如連接到一個關(guān)系數(shù)據(jù)庫,捕捉表的所有變更。
kafka的作用
a. 數(shù)據(jù)緩沖,保證下游消費(fèi)數(shù)據(jù)速度穩(wěn)定;
b. 解耦和擴(kuò)展,消息隊列可以作為接口層,只要遵循規(guī)范,上下游可以隨意擴(kuò)展;
c. 冗余和健壯性,消息可以保存為多個副本,多個下游服務(wù)可以消費(fèi)同一信息;
d. 異步通信,消息消費(fèi)速度根據(jù)消費(fèi)者決定,下游服務(wù)可以在需要的時候再去處理它。
kafka 消息發(fā)送機(jī)制
producer將消息序列化后,經(jīng)過分區(qū)處理器處理,決定發(fā)到對應(yīng)topic的對應(yīng)分區(qū),最后將消息發(fā)送到客戶端的消息緩沖池,消息緩沖池默認(rèn)最大值為32M,交由一個sender線程進(jìn)行消息發(fā)送。消息在緩存池會分為一個個把它分成,每個batch默認(rèn)16kb,消息一旦滿足該大小或超過最大空閑時間,會被發(fā)送到broker。producer可以配置消息重發(fā)次數(shù),由于網(wǎng)絡(luò)抖動等原因,消息可能會重新進(jìn)行發(fā)送。
