Kafka是一個(gè) 分布式的杀迹、可分區(qū)的押搪、可復(fù)制的消息系統(tǒng)浅碾。它提供了普通消息系統(tǒng)的功能续语,但具有自己獨(dú)特的設(shè)計(jì)。
首先來(lái)了解一下Kafka所使用的基本術(shù)語(yǔ):
Topic
Kafka將消息種子(Feed)分門(mén)別類(lèi)埂陆, 每一類(lèi)的消息稱之為話題(Topic).
Producer
發(fā)布消息的對(duì)象稱之為話題生產(chǎn)者(Kafka topic producer)
Consumer
訂閱消息并處理發(fā)布的消息的種子的對(duì)象稱之為話題消費(fèi)者(consumers)
Broker
已發(fā)布的消息保存在一組服務(wù)器中娃豹,稱之為Kafka集群。集群中的每一個(gè)服務(wù)器都是一個(gè)代理(Broker). 消費(fèi)者可以訂閱一個(gè)或多個(gè)話題鹃栽,并從Broker拉數(shù)據(jù)躯畴,從而消費(fèi)這些已發(fā)布的消息。
partition
每一個(gè)分區(qū)都是一個(gè)順序的丰嘉、不可變的消息隊(duì)列嚷缭, 并且可以持續(xù)的添加。分區(qū)中的消息都被分配了一個(gè)序列號(hào)阅爽,稱之為偏移量(offset),在每個(gè)分區(qū)中此偏移量都是唯一的简肴。 Kafka集群保持所有的消息百侧,直到它們過(guò)期, 無(wú)論消息是否被消費(fèi)了辫狼。
Client和Server之間的通訊是通過(guò)一條簡(jiǎn)單观话、高性能并且?和開(kāi)發(fā)語(yǔ)言無(wú)關(guān)的TCP協(xié)議
生產(chǎn)者(Producer)
生產(chǎn)者往某個(gè)Topic上發(fā)布消息越平。生產(chǎn)者也負(fù)責(zé)選擇發(fā)布到?Topic上的哪一個(gè)分區(qū)灵迫。最簡(jiǎn)單的方式從分區(qū)列表中輪流選擇晦溪。也可以根據(jù)某種算法依照權(quán)重選擇分區(qū)。開(kāi)發(fā)者負(fù)責(zé)如何選擇分區(qū)的算法狞换。
消費(fèi)者(Consumers)
Topic分區(qū)中消息只能由消費(fèi)者組中的唯一一個(gè)消費(fèi)者處理舟肉,所以消息肯定是按照先后順序進(jìn)行處理的。但是它也僅僅是保證Topic的一個(gè)分區(qū)順序處理黄琼,不能保證跨分區(qū)的消息先后處理順序整慎。 所以,如果你想要順序的處理Topic的所有消息撤师,那就只提供一個(gè)分區(qū)拧揽。
kafka的保證
- 生產(chǎn)者發(fā)送到一個(gè)特定的Topic的分區(qū)上的消息將會(huì)按照它們發(fā)送的順序依次加入
- 消費(fèi)者收到的消息也是此順序
- 如果一個(gè)Topic配置了復(fù)制因子( replication facto)為N, 那么可以允許N-1服務(wù)器宕機(jī)而不丟失任何已經(jīng)增加的消息
消息傳遞保障
- 最多一次 --- 消息可能丟失万俗,但永遠(yuǎn)不會(huì)重發(fā)
- 至少一次 --- 消息絕不會(huì)丟失饮怯,但有可能重新發(fā)送
- 正好一次 --- 這是人們真正想要的,每個(gè)消息傳遞一次且僅一次
性能
3臺(tái)kafka集群 3臺(tái)customer(生產(chǎn)者或者消費(fèi)者):
CPU:8 vCPU蓖墅, Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
內(nèi)存:16 GB
磁盤(pán):500 GB
實(shí)驗(yàn)條件:3個(gè)Broker论矾,1個(gè)Topic,6個(gè)Partition贪壳,無(wú)Replication,異步模式彪笼,消息Payload為100字節(jié)
測(cè)試項(xiàng)目:測(cè)試1個(gè)Producer和1個(gè)Consumer同時(shí)工作時(shí)Consumer所能消費(fèi)到的消息量
測(cè)試結(jié)果:1,215,613 records/second
#######優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
- 高吞吐率
- 分布式,高擴(kuò)展性
- 容錯(cuò)性
- 持久性幅恋,可靠性
- 高并發(fā): 支持?jǐn)?shù)千個(gè)客戶端同時(shí)讀寫(xiě)