Kafka是什么、主要應(yīng)用在什么場景? 建議收藏!
點擊上方[全棧開發(fā)者社區(qū)]→右上角[...]→[設(shè)為星標(biāo)?]
1、kafka是什么?
Kafka是由LinkedIn開發(fā)的一個分布式基于發(fā)布/訂閱的消息系統(tǒng),使用Scala編寫,它以可水平擴(kuò)展和高吞吐率而被廣泛使用。
2、產(chǎn)生背景
Kafka是一個消息系統(tǒng),用作LinkedIn的活動流(Activity Stream)和運(yùn)營數(shù)據(jù)處理管道(Pipeline)的基礎(chǔ)?;顒恿鲾?shù)據(jù)是幾乎所有站點在對其網(wǎng)站使用情況做報表時都要用到的數(shù)據(jù)中最常規(guī)的部分。
活動數(shù)據(jù)包括頁面訪問量(Page View)、被查看內(nèi)容方面的信息以及搜索情況等內(nèi)容。這種數(shù)據(jù)通常的處理方式是先把各種活動以日志的形式寫入某種文件,然后周期性地對這些文件進(jìn)行統(tǒng)計分析。
運(yùn)營數(shù)據(jù)指的3是服務(wù)器的性能數(shù)據(jù)(CPU、IO使用率、請求時間、服務(wù)日志等等數(shù)據(jù))。運(yùn)營數(shù)據(jù)的統(tǒng)計方法種類繁多。
3、基本架構(gòu)圖

4、基本概念解釋
1)Broker
Kafka集群包含一個或多個服務(wù)器,這種服務(wù)器被稱為broker。broker端不維護(hù)數(shù)據(jù)的消費(fèi)狀態(tài),提升了性能。直接使用磁盤進(jìn)行存儲,線性讀寫,速度快:避免了數(shù)據(jù)在JVM內(nèi)存和系統(tǒng)內(nèi)存之間的復(fù)制,減少耗性能的創(chuàng)建對象和垃圾回收。
2)Producer
負(fù)責(zé)發(fā)布消息到Kafka broke
3)Consumer
消息消費(fèi)者,向Kafka broker讀取消息的客戶端,consumer從broker拉取(pull)數(shù)據(jù)并進(jìn)行處理。
4)Topic
每條發(fā)布到Kafka集群的消息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存于一個或多個broker上但用戶只需指定消息的Topic即可生產(chǎn)或消費(fèi)數(shù)據(jù)而不必關(guān)心數(shù)據(jù)存于何處)
5)Partition
Parition是物理上的概念,每個Topic包含一個或多個Partition.
6)Consumer Group
每個Consumer屬于一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name則屬于默認(rèn)的group)
7)Topic & Partition
Topic在邏輯上可以被認(rèn)為是一個queue,每條消費(fèi)都必須指定它的Topic,可以簡單理解為必須指明把這條消息放進(jìn)哪個queue里。為了使得Kafka的吞吐率可以線性提高,物理上把Topic分成一個或多個Partition,每個Partition在物理上對應(yīng)一個文件夾,該文件夾下存儲這個Partition的所有消息和索引文件。
若創(chuàng)建topic1和topic2兩個topic,且分別有13個和19個分區(qū),則整個集群上會相應(yīng)會生成共32個文件夾(本文所用集群共8個節(jié)點,此處topic1和topic2 replication-factor均為1)。
5、適用場景
1、Messaging
對于一些常規(guī)的消息系統(tǒng),kafka是個不錯的選擇;partitons/replication和容錯,可以使kafka具有良好的擴(kuò)展性和性能優(yōu)勢.不過到目前為止,我們應(yīng)該很清楚認(rèn)識到,kafka并沒有提供JMS中的"事務(wù)性""消息傳輸擔(dān)保(消息確認(rèn)機(jī)制)""消息分組"等企業(yè)級特性;kafka只能使用作為"常規(guī)"的消息系統(tǒng),在一定程度上,尚未確保消息的發(fā)送與接收絕對可靠(比如,消息重發(fā),消息發(fā)送丟失等)
2、Website activity tracking
kafka可以作為"網(wǎng)站活性跟蹤"的最佳工具;可以將網(wǎng)頁/用戶操作等信息發(fā)送到kafka中.并實時監(jiān)控,或者離線統(tǒng)計分析等
3、Metrics
Kafka通常被用于可操作的監(jiān)控數(shù)據(jù)。這包括從分布式應(yīng)用程序來的聚合統(tǒng)計用來生產(chǎn)集中的運(yùn)營數(shù)據(jù)提要。
4、Log Aggregation
kafka的特性決定它非常適合作為"日志收集中心";application可以將操作日志"批量""異步"的發(fā)送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/壓縮消息等,這對producer端而言,幾乎感覺不到性能的開支.此時consumer端可以使hadoop等其他系統(tǒng)化的存儲和分析系統(tǒng)
END
作者:寶哥-NO1
blog.csdn.net/code52/article/details/50475511
