一、概述
kafka是一個(gè)分布式的消息系統(tǒng),由LinkedIn開發(fā),后成為Apache的一部分。它以水平擴(kuò)展和高吞吐率被廣泛使用。
最近開始深入學(xué)習(xí)kafka,然后打算寫一個(gè)kafka系列文章,這是第一篇。雖然目前網(wǎng)上關(guān)于kafka的文章有很多,很多都寫的很詳細(xì),但是還是想自己整理一遍。一方面為了更好的鞏固,另一方面也為了以后復(fù)習(xí)起來方便。
本篇對(duì)kafka的整個(gè)架構(gòu)以及概念做一些簡(jiǎn)單的介紹。后面再對(duì)一些存儲(chǔ)機(jī)制,以及讀寫原理,甚至對(duì)源碼對(duì)一些解析。
二、kafka的架構(gòu)

Producer: 負(fù)責(zé)生產(chǎn)消息的組件。
Broker: 消息存儲(chǔ)處理的組件。可以水平擴(kuò)展,數(shù)量越多,吞吐量越高。
Customer: 消息的消費(fèi)者。
Customer Group: 消費(fèi)者群組。一個(gè)group中可以有多個(gè)customer,他們以協(xié)作的方式從一個(gè)topic的各個(gè)partition獲取數(shù)據(jù)。
Zookeeper Cluster: zk集群,用于管理配置,進(jìn)行l(wèi)eader選舉。
三、Topic & Partition
topic可以理解為消息的主題,producer發(fā)送消息的時(shí)候需要指定消息的topic,customer消費(fèi)消息的時(shí)候也要指定要消費(fèi)的消息topic。
在kafka中,每個(gè)topic都有若干個(gè)partition,具體的數(shù)量可以通過配置num.partitions來指定。每個(gè)parttion都有若干個(gè)復(fù)制partition,用于partition leader失效后啟用,從而達(dá)到數(shù)據(jù)高可用的目的。
當(dāng)producer向kafka集群提交消息的時(shí)候,會(huì)將消息通過分區(qū)器發(fā)送到指定的partition中。customer消費(fèi)的時(shí)候也會(huì)自動(dòng)根據(jù)負(fù)載均衡消費(fèi)指定的partition。另外,一個(gè)partition只能被一個(gè)customer Group中的一個(gè)customer消費(fèi)。也就是說,如果一個(gè)customer Group中有5個(gè)customer,但是該topic的partition只有4個(gè),那么會(huì)有一個(gè)customer是消費(fèi)不到數(shù)據(jù)的。
producer生產(chǎn)數(shù)據(jù)示意圖:

customer 消費(fèi)數(shù)據(jù)示意圖:

四、關(guān)于Customer Group和Customer
一般我們要消費(fèi)kafka消息的時(shí)候,需要制定customer group id。kafka會(huì)記錄這個(gè)group id,然后維護(hù)相關(guān)的offset(都記錄在zk集群上面)。每個(gè)group id都會(huì)維護(hù)自己的offset,比如某個(gè)topic有5個(gè)partition,然后group id開始消費(fèi)的時(shí)候就會(huì)有5個(gè)不同的offset分別對(duì)應(yīng)5個(gè)parttion。
當(dāng)有customer加入這個(gè)group id的時(shí)候,會(huì)被負(fù)載均衡去消費(fèi)某幾個(gè)partition。當(dāng)然,kafka會(huì)保證所有的partition都有customer在消費(fèi)。也就是如果某個(gè)customer group中只有一個(gè)customer,那么這個(gè)customer會(huì)消費(fèi)該topic下所有的partiton。
也就是說,不同customer group之間的消費(fèi)進(jìn)度是相互獨(dú)立的。如果我們要用kafka來做消息訂閱發(fā)布的組件,那么只要開多個(gè)customer group就來消費(fèi)消息就可以了。
如果要用kafka做消費(fèi)隊(duì)列的組件,那么可以設(shè)定多個(gè)customer同屬于一個(gè)customer group。
我的CSDN博客地址:
https://blog.csdn.net/u013332124/article/details/80330561