Kafka的性能為什麼這麼好,大數據之必備知識儲備,kafak是什麼

猿之生活java技術學堂 發佈 2022-11-13T23:55:58.041096+00:00

創作不易,關注、點讚,分享,轉發,評論,收藏,掌握網際網路前沿知識,支持一下,謝謝。Kafka性能及應用場景介紹大數據裡面很火的技術Kafka,Kafka 是一個分布式的消息系統,其高性能在圈內很出名。

創作不易,關注、點讚,分享,轉發,評論,收藏,掌握網際網路前沿知識,支持一下,謝謝。

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節點。

關鍵字: