1、kafka是什麼?
Kafka是由LinkedIn開發的一個分布式基于釋出/訂閱的消息系統,使用Scala編寫,它以可水準擴充和高吞吐率而被廣泛使用。
2、産生背景
Kafka是一個消息系統,用作LinkedIn的活動流(Activity Stream)和營運資料處理管道(Pipeline)的基礎。活動流資料是幾乎所有站點在對其網站使用情況做報表時都要用到的資料中最正常的部分。
活動資料包括頁面通路量(Page View)、被檢視内容方面的資訊以及搜尋情況等内容。這種資料通常的處理方式是先把各種活動以日志的形式寫入某種檔案,然後周期性地對這些檔案進行統計分析。
營運資料指的3是伺服器的性能資料(CPU、IO使用率、請求時間、服務日志等等資料)。營運資料的統計方法種類繁多。
3、基本架構圖

4、基本概念解釋
1)Broker
Kafka叢集包含一個或多個伺服器,這種伺服器被稱為broker。broker端不維護資料的消費狀态,提升了性能。直接使用磁盤進行存儲,線性讀寫,速度快:避免了資料在JVM記憶體和系統記憶體之間的複制,減少耗性能的建立對象和垃圾回收。
2)Producer
負責釋出消息到Kafka broke
3)Consumer
消息消費者,向Kafka broker讀取消息的用戶端,consumer從broker拉取(pull)資料并進行處理。
4)Topic
每條釋出到Kafka叢集的消息都有一個類别,這個類别被稱為Topic。(實體上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然儲存于一個或多個broker上但使用者隻需指定消息的Topic即可生産或消費資料而不必關心資料存于何處)
5)Partition
Parition是實體上的概念,每個Topic包含一個或多個Partition.
6)Consumer Group
每個Consumer屬于一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name則屬于預設的group)
7)Topic & Partition
Topic在邏輯上可以被認為是一個queue,每條消費都必須指定它的Topic,可以簡單了解為必須指明把這條消息放進哪個queue裡。為了使得Kafka的吞吐率可以線性提高,實體上把Topic分成一個或多個Partition,每個Partition在實體上對應一個檔案夾,該檔案夾下存儲這個Partition的所有消息和索引檔案。
若建立topic1和topic2兩個topic,且分别有13個和19個分區,則整個叢集上會相應會生成共32個檔案夾(本文所用叢集共8個節點,此處topic1和topic2 replication-factor均為1)。
5、适用場景
1、Messaging
對于一些正常的消息系統,kafka是個不錯的選擇;partitons/replication和容錯,可以使kafka具有良好的擴充性和性能優勢.不過到目前為止,我們應該很清楚認識到,kafka并沒有提供JMS中的"事務性""消息傳輸擔保(消息确認機制)""消息分組"等企業級特性;kafka隻能使用作為"正常"的消息系統,在一定程度上,尚未確定消息的發送與接收絕對可靠(比如,消息重發,消息發送丢失等)
2、Website activity tracking
kafka可以作為"網站活性跟蹤"的最佳工具;可以将網頁/使用者操作等資訊發送到kafka中.并實時監控,或者離線統計分析等
3、Metrics
Kafka通常被用于可操作的監控資料。這包括從分布式應用程式來的聚合統計用來生産集中的營運資料提要。
4、Log Aggregation
kafka的特性決定它非常适合作為"日志收集中心";application可以将記錄檔"批量""異步"的發送到kafka叢集中,而不是儲存在本地或者DB中;kafka可以批量送出消息/壓縮消息等,這對producer端而言,幾乎感覺不到性能的開支.此時consumer端可以使hadoop等其他系統化的存儲和分析系統。
原文連結:
https://blog.csdn.net/code52/article/details/50475511版權聲明:本文為CSDN部落客「寶哥-NO1」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。