創作不易,關注、點讚,分享,轉發,評論,收藏,掌握網際網路前沿知識,支持一下,謝謝。
Kafka性能及應用場景介紹
大數據裡面很火的技術Kafka,Kafka 是一個分布式的消息系統,其高性能在圈內很出名。比如說,kafka可以支持多生產者、多消費者、基於磁碟的數據存儲,伸縮性、高性能輕鬆處理巨大的消息流。
Kafka也具備多應用場景,比如用於開發消息系統,網站活動數據追蹤、日誌聚合、流處理等。
什麼是kafka
Kafka 底層的 IO 用的是 NIO,Kafka最初由Linkedin公司開發,是一個分布式的、分區的、多副本的、多訂閱者,基於zookeeper協調的分布式日誌系統。
Kafka主要特性
1)高吞吐量、低延遲:kafka每秒可以處理大批量數據,數據延遲是毫秒級別的,其具備獨特的高可用特性;
2)可擴展性:kafka集群支持橫向擴展,支持高可用下應用場景;
3)持久性、可靠性:消息被持久化到本地磁碟,避免數據遺失,具備可恢復性特點;
4)容錯性:允許集群中的節點失敗;
5)高並發:單機可支持數千個客戶端同時讀寫,具備高可用應用場景;
Kafka架構分析
- Topic
消息被發送到kafak中都有一個類別,也就是常說的Topic,其實就是將消息按照topic來分類,topic就是邏輯上的分類,一個Topic可以有1個或多個Partition。
- partition
分區,每個topic被物理劃分為一個或多個分區,每個分區在物理上對應一個文件夾,Topic中的數據可以分割為一個或多個Partition,Partition在底層邏輯是log文件。
- Leader
每個主題都有若干個Partition副本,每個分區都一個leader和多個follower,leader負責所有的讀寫操作。
- producer
生產者,生產者發送消息到指定的topic下。
- consumer
消費者,消費者從topic中消費數據,順序執行消費數據。
- consumer group
消費者組,每個consumer屬於一個特定的消費者組,可為每個consumer指定消費者組若不指定則屬於默認group。
- follower
follower不對外提供服務,只與leader保持數據同步。
- rebalance
Rebalance表示"重平衡",是 Kafka 消費者端實現高可用的重要手段。
Kafka中zookeeper的作用
Kafka在使用的時候通常都需要配合Zookeeper,分區中的leader和follower均勻分布在不同的Kafka伺服器上,每台Kafka伺服器同時有分區leader和follower。
kafka應用場景分析
1、日誌收集:可以用Kafka收集各種服務的log。
2、消息系統:生產者和消費者、緩存消息等。
3、用戶活動跟蹤:kafka經常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網頁、搜索、點擊等活動,然後消費者通過消息訂閱,實時的監控分析。
4、大數據實時計算:kafka被應用到大數據處理,如與spark、storm等整合。
Kafka的性能好在什麼地方,主要特點是什麼
kafka不基於內存,而是硬碟存儲,因此消息堆積能力更強
1、順序寫:利用磁碟的順序訪問速度,讀寫可以接近內存,kafka的消息都是append操作。
其終究原因是,partition是有序的,這樣可以節省了磁碟的尋道時間,同時通過批量操作、節省寫入次數,partition物理上分為多個segment存儲,方便刪除。
如下圖
傳統:
- 讀取磁碟文件數據到內核緩衝區
- 將內核緩衝區的數據copy到用戶緩衝區
- 將用戶緩衝區的數據copy到socket的發送緩衝區
- 將socket發送緩衝區中的數據發送到網卡、進行傳輸
2、零拷貝
零拷貝是指Kafka利用 linux 作業系統的 "zero-copy" 機制在消費端做的優化。直接將內核緩衝區的數據發送到網卡傳輸,使用的是作業系統的指令支持。
原因如下:
1) kafka不太依賴jvm,作業系統的pageCache,如果生產消費速度可以的話,則直接用pageCache交換數據,不需要經過磁碟IO進行處理。
2) Page Cache
為了優化讀寫性能,Kafka利用了作業系統本身的Page Cache,就是利用作業系統自身的內存而不是JVM空間內存。
3) 分區分段
Kafka的message是按topic分類存儲的,topic中的數據又是按照一個一個的partition即分區存儲到不同broker節點。