1.使用場(chǎng)景
在我們大量使用分布式數(shù)據(jù)庫、分布式計(jì)算集群的時(shí)候仅财,是否會(huì)遇到這樣一些問題:
==我想分析一下用戶行為(pageviews),以便我能設(shè)計(jì)出更好的廣告位;
==我想對(duì)用戶的搜索關(guān)鍵詞進(jìn)行統(tǒng)計(jì),分析出前的流行趨勢(shì)述吸;
==有些數(shù)據(jù),存數(shù)據(jù)庫浪費(fèi)锣笨,直接存硬盤操作效率又低;
這個(gè)時(shí)候蝌矛,就可以用消息系統(tǒng)了,尤其是分布式消息系統(tǒng)
2.Kafka使用背景
3.kafka相關(guān)概念
一些基本的概念:
==消費(fèi)者(Consumer):從消息隊(duì)列中請(qǐng)求消息的客戶端應(yīng)用程序错英;
==生產(chǎn)者(Producer):向broker發(fā)布消息的客戶端應(yīng)用程序入撒;
==AMQP服務(wù)器端(broker):用來接收生產(chǎn)者發(fā)送的消息并將這些消息路由給服務(wù)器中的隊(duì)列;//一個(gè)broker即是一臺(tái)機(jī)器
==主題(Topic):一個(gè)主題類似新聞中的體育椭岩、娛樂茅逮、教育等分類概念,在實(shí)際工程中通常一個(gè)業(yè)務(wù)一個(gè)主題判哥;
==分區(qū)(Partition):一個(gè)topic中的消息數(shù)據(jù)按照多個(gè)分區(qū)組織献雅,分區(qū)是kafka消息隊(duì)列組織的最小單位,一個(gè)分區(qū)可以看做是一個(gè)FIFO的隊(duì)列;
partion和topic 的關(guān)系
R涛啊3土稹!一個(gè)非常大的topic可以分布到多個(gè) broker(即服務(wù)器)上夺荒,一個(gè)topic可以分為多個(gè)partition瞒渠,每個(gè)partition是一個(gè)有序的隊(duì)列良蒸。partition中的每條消息 都會(huì)被分配一個(gè)有序的id(offset)。kafka只保證按一個(gè)partition中的順序?qū)⑾l(fā)給consumer伍玖,不保證一個(gè)topic的整體 (多個(gè)partition間)的順序嫩痰。也就是說,一個(gè)topic在集群中可以有多個(gè)partition窍箍,那么分區(qū)的策略是什么串纺?(消息發(fā)送到哪個(gè)分區(qū)上,有兩種基本的策略椰棘,一是采用Key Hash算法纺棺,一是采用Round Robin算法)
4.Consumer Group (CG)
消息系統(tǒng)有兩類,一是廣播邪狞,二是訂閱發(fā)布祷蝌。廣播是把消息發(fā)送給所有的消費(fèi)者;發(fā)布訂閱是把消息只發(fā)送給訂閱者帆卓。Kafka通過Consumer Group組合實(shí)現(xiàn)了這兩種機(jī)制: 實(shí)現(xiàn)一個(gè)topic消息廣播(發(fā)給所有的consumer)和單播(發(fā)給任意一個(gè)consumer)巨朦。一個(gè) topic可以有多個(gè)CG。topic的消息會(huì)復(fù)制(不是真的復(fù)制剑令,是概念上的)到所有的CG糊啡,但每個(gè)CG只會(huì)把消息發(fā)給該CG中的一個(gè) consumer(這是實(shí)現(xiàn)一個(gè)Topic多Consumer的關(guān)鍵點(diǎn):為一個(gè)Topic定義一個(gè)CG,CG下定義多個(gè)Consumer)吁津。如果需要實(shí)現(xiàn)廣播棚蓄,只要每個(gè)consumer有一個(gè)獨(dú)立的CG就可以了。要實(shí)現(xiàn)單播只要所有的consumer在同一個(gè)CG腺毫。用CG還 可以將consumer進(jìn)行自由的分組而不需要多次發(fā)送消息到不同的topic癣疟。典型的應(yīng)用場(chǎng)景是挣柬,多個(gè)Consumer來讀取一個(gè)Topic(理想情況下是一個(gè)Consumer讀取Topic的一個(gè)Partition),那么可以讓這些Consumer屬于同一個(gè)Consumer Group即可實(shí)現(xiàn)消息的多Consumer并行處理潮酒,原理是Kafka將一個(gè)消息發(fā)布出去后,ConsumerGroup中的Consumers可以通過Round Robin的方式進(jìn)行消費(fèi)(Consumers之間的負(fù)載均衡使用Zookeeper來實(shí)現(xiàn))
5.kafka支持的語言
Kafka 客戶端支持當(dāng)前大部分主流語言邪蛔,包括: C急黎、C++、Erlang侧到、Java勃教、.net、perl匠抗、PHP故源、Python、Ruby汞贸、Go绳军、Javascript印机。
可以使用以上任何一種語言和kafka服務(wù)器進(jìn)行通信(即編寫自己的consumer和producer程序)