国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面試題:Kafka 為什么那么快?

這篇具有很好參考價值的文章主要介紹了面試題:Kafka 為什么那么快?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

有人說:他曾在一臺配置較好的機子上對 Kafka 進行性能壓測,壓測結(jié)果是 Kafka 單個節(jié)點的極限處理能力接近每秒 2000萬 條消息,吞吐量達到每秒 600MB。

那 Kafka 為什么這么快?如何做到這個高的性能?
本篇文章主要從這 3 個角度來分析:

  • 生產(chǎn)端
  • 服務(wù)端 Broker
  • 消費端

先來看下生產(chǎn)端發(fā)送消息,Kafka 做了哪些優(yōu)化?


(1)生產(chǎn)端 Producer

面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

Producer 生產(chǎn)者發(fā)送消息的流程

  1. 首先指定消息發(fā)送到哪個 Topic。
  2. 選擇一個 Topic 的分區(qū) partitiion,默認是輪詢來負載均衡。也可以指定一個分區(qū) key,根據(jù) key 的 hash 值來分發(fā)到指定的分區(qū)。也可以自定義 partition 來實現(xiàn)分區(qū)策略。
  3. 找到這個分區(qū)的 leader partition。
  4. 與所在機器的 Broker 的 socket 建立通信。
  5. 發(fā)送 Kafka 自定義協(xié)議格式的請求(包含攜帶的消息、批量消息)。

將思緒集中在消息發(fā)送時候,可發(fā)現(xiàn)這兩個華點:批量消息和自定義協(xié)議格式。

  1. 批量發(fā)送:減少了與服務(wù)端 Broker 處理請求的次數(shù),從而提升總體的處理能力。調(diào)用 send() 方法時,不會立刻把消息發(fā)送出去,而是緩存起來,選擇恰當(dāng)時機把緩存里的消息劃分成一批數(shù)據(jù),按批次發(fā)送給服務(wù)端 Broker。
  2. 自定義協(xié)議格式:序列化方式和壓縮格式都能減少數(shù)據(jù)體積,從而節(jié)省網(wǎng)絡(luò)資源消耗。

各種壓縮算法對比:

  • 吞吐量方面:LZ4 > Snappy > zstd 和 GZIP
  • 壓縮比方面:zstd > LZ4 > GZIP > Snappy
    面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

(2)服務(wù)端 Broker

Broker 的高性能主要從這 3 個方面體現(xiàn):

  1. PageCache 緩存
  2. Kafka 的文件布局 以及 磁盤文件順序?qū)懭?/li>
  3. 零拷貝 sendfile:加速消費流程

下面展開講講。

1)PageCache 加速消息讀寫

使用 PageCache 主要能帶來如下好處:

  • 寫入文件的時候:操作系統(tǒng)會先把數(shù)據(jù)寫入到內(nèi)存中的 PageCache,然后再一批一批地寫到磁盤上,從而減少磁盤 IO 開銷。
    面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

  • 讀取文件的時候:也是從 PageCache 中來讀取數(shù)據(jù)。

如果消息剛剛寫入到服務(wù)端就會被消費,按照 LRU 的“優(yōu)先清除最近最少使用的頁”這種策略,讀取的時候,對于這種剛剛寫入的
PageCache,命中的幾率會非常高。

2)Kafka 的文件布局 以及 磁盤文件順序?qū)懭?/h3>

文件布局如下圖所示:

面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

主要特征是:文件的組織方式是“topic + 分區(qū)”,每一個 topic 可以創(chuàng)建多個分區(qū),每一個分區(qū)包含單獨的文件夾。

Kafka 在分區(qū)級別實現(xiàn)文件順序?qū)?/strong>:即多個文件同時寫入,更能發(fā)揮磁盤 IO 的性能。

  • 相對比 RocketMQ: RocketMQ 在消息寫入時追求極致的順序?qū)懀械南⒉环种黝}一律順序?qū)懭?commitlog 文件, topic 和 分區(qū)數(shù)量的增加不會影響寫入順序。
  • 弊端: Kafka 在消息寫入時的 IO 性能,會隨著 topic 、分區(qū)數(shù)量的增長先上升,后下降。所以使用 Kafka 時,要警惕 Topic 和 分區(qū)數(shù)量。

3)零拷貝 sendfile:加速消費流程

當(dāng)不使用零拷貝技術(shù)讀取數(shù)據(jù)時:

面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

流程如下:

  1. 消費端 Consumer:向 Kafka Broker 請求拉取消息
  2. Kafka Broker 從 OS Cache 讀取消息到 應(yīng)用程序的內(nèi)存空間:
    a. 若 OS Cache 中有消息,則直接讀取
    b. 若 OS Cache 中無消息,則從磁盤里讀取
  3. 再通過網(wǎng)卡,socket 將數(shù)據(jù)發(fā)送給 消費端Consumer

當(dāng)使用零拷貝技術(shù)讀取數(shù)據(jù):

面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

Kafka 使用零拷貝技術(shù)可以把這個復(fù)制次數(shù)減少一次,直接從 PageCache 中把數(shù)據(jù)復(fù)制到 Socket 緩沖區(qū)中。

這樣不用將數(shù)據(jù)復(fù)制到用戶內(nèi)存空間。
DMA 控制器直接完成數(shù)據(jù)復(fù)制,不需要 CPU 參與,速度更快。

(3)消費端 Consumer

消費者只從 Leader分區(qū)批量拉取消息。

為了提高消費速度,多個消費者并行消費比不可少。Kafka 允許創(chuàng)建消費組(唯一標識 group.id),在同一個消費組的消費者共同消費數(shù)據(jù)。

舉個栗子:

  • 有兩個 Kafka Broker,即有 2個機子
  • 有一個主題:TOPICA,有 3 個分區(qū)(0, 1, 2)

面試題:Kafka 為什么那么快?,面試題,kafka,java,面試題

如上圖,舉例 4 中情況:文章來源地址http://www.zghlxwxcb.cn/news/detail-814642.html

  1. group.id = 1,有一個消費者:這個消費者要處理所有數(shù)據(jù),即 3 個分區(qū)的數(shù)據(jù)。
  2. group.id = 2,有兩個消費者:consumer 1消費者需處理 2個分區(qū)的數(shù)據(jù),consumer2 消費者需處理 1個分區(qū)的數(shù)據(jù)
  3. group.id = 3,有三個消費者:消費者數(shù)量與分區(qū)數(shù)量相等,剛好每個消費者處理一個分區(qū)
  4. group.id = 4,有四個消費者:消費者數(shù)量 > 分區(qū)數(shù)量,第四個消費者則會處于空閑狀態(tài)

到了這里,關(guān)于面試題:Kafka 為什么那么快?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Kafka為什么這么快?

    Kafka 是一個基于發(fā)布-訂閱模式的消息系統(tǒng),它可以在多個生產(chǎn)者和消費者之間傳遞大量的數(shù)據(jù)。Kafka 的一個顯著特點是它的高吞吐率,即每秒可以處理百萬級別的消息。那么 Kafka 是如何實現(xiàn)這樣高得性能呢?本文將從七個方面來分析 Kafka 的速度優(yōu)勢。 零拷貝技術(shù) 僅可追加

    2024年02月11日
    瀏覽(26)
  • kafka為什么如此之快?

    kafka為什么如此之快?

    天下武功,唯快不破。同樣的,kafka在消息隊列領(lǐng)域,也是非常快的,這里的塊指的是kafka在單位時間搬運的數(shù)據(jù)量大小,也就是吞吐量,下圖是搬運網(wǎng)上的一個性能測試結(jié)果,在同步發(fā)送場景下,單機Kafka的吞吐量高達17.3w/s, 不愧是高吞吐量消息中間件的行業(yè)老大。 那究竟

    2024年02月06日
    瀏覽(22)
  • kafka為什么盡量使用手動提交

    在 Kafka 中,消費者可以使用手動提交和自動提交兩種方式來管理消費偏移量(offset)。它們之間的區(qū)別如下: 1. 手動提交 offset: ? ?- 消費者通過調(diào)用 `commitSync()` 或 `commitAsync()` 方法手動提交消費偏移量。 ? ?- 手動提交 offset 需要顯式地指定要提交的分區(qū)和偏移量。 ? ?

    2024年02月15日
    瀏覽(19)
  • 48 | DMA:為什么Kafka這么快?

    48 | DMA:為什么Kafka這么快?

    過去幾年里,整個計算機產(chǎn)業(yè)界,都在嘗試不停地提升 I/O 設(shè)備的速度。把 HDD 硬盤換成 SSD 硬盤,我們?nèi)匀挥X得不夠快;用 PCI Express 接口的 SSD 硬盤替代 SATA 接口的 SSD 硬盤,我們還是覺得不夠快,所以,現(xiàn)在就有了傲騰(Optane)這樣的技術(shù)。 但是,無論 I/O 速度如何提升,

    2024年02月21日
    瀏覽(16)
  • kafka的堆內(nèi)存大小對kafka的影響以及為什么堆內(nèi)存大一些kafka會更穩(wěn)定

    堆內(nèi)存是Java虛擬機(JVM)用于存儲運行時數(shù)據(jù)的一部分內(nèi)存。對于Kafka Broker,它是一個由Java編寫的分布式消息系統(tǒng),因此Kafka Broker的性能和穩(wěn)定性會受到堆內(nèi)存大小的影響。 以下是堆內(nèi)存大小對Kafka的一些詳細影響: 存儲和緩存消息: Kafka Broker使用內(nèi)存來存儲消息,以支持

    2024年01月19日
    瀏覽(63)
  • 離線數(shù)倉中,為什么用兩個flume,一個kafka

    實時數(shù)倉中,為什么沒有零點漂移問題? 因為flink直接取的事件時間 用kafka是為了速度快,并且數(shù)據(jù)不丟,那為什么既用了kafkachannel,也用了kafka,而不只用kafkachannel呢? 因為需要削峰填谷 離線數(shù)倉中,為什么用兩個flume,一個kafka,直接用taildirsource,kafkachannel,hdfssink不行嗎?

    2024年02月14日
    瀏覽(19)
  • ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

    ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

    ZooKeeper 是一個開源的分布式協(xié)調(diào)服務(wù)框架,你也可以認為它是一個可以保證一致性的分布式(小量)存儲系統(tǒng)。特別適合存儲一些公共的配置信息、集群的一些元數(shù)據(jù)等等。 它有持久節(jié)點和臨時節(jié)點,而臨時節(jié)點這個玩意再配合 Watcher 機制就很有用。 當(dāng)創(chuàng)建臨時節(jié)點的客戶端

    2024年02月06日
    瀏覽(13)
  • Kafka必須掌握的核心技術(shù):為什么吞吐量大、速度快?

    Kafka必須掌握的核心技術(shù):為什么吞吐量大、速度快?

    如果不刪除硬盤肯定會被撐滿,所以Kakfa提供了兩種策略來刪除數(shù)據(jù)。一是基于時間,二是基于partition文件大小。具體配置可以參看它的配置文檔。 二、Page Cache 為了優(yōu)化讀寫性能,Kafka利用了操作系統(tǒng)本身的Page Cache,就是利用操作系統(tǒng)自身的內(nèi)存而不是JVM空間內(nèi)存。這樣做

    2024年04月08日
    瀏覽(19)
  • Kafka如何保證消息的消費順序【全局有序、局部有序】、Kafka如何保證消息不被重復(fù)消費、Kafka為什么這么快?【重點】、Kafka常見問題匯總【史上最全】

    Kafka如何保證消息的消費順序【全局有序、局部有序】、Kafka如何保證消息不被重復(fù)消費、Kafka為什么這么快?【重點】、Kafka常見問題匯總【史上最全】

    目錄 Kafka消息生產(chǎn) 一個Topic對應(yīng)一個Partition 一個Topic對應(yīng)多個Partition Kafka消息的順序性保證(Producer、Consumer) 全局有序 局部有序? max.in.flight.requests.per.connection參數(shù)詳解 Kafka的多副本機制 Kafka的follower從leader同步數(shù)據(jù)的流程 Kafka的follower為什么不能用于消息消費 Kafka的多分區(qū)

    2024年04月11日
    瀏覽(24)
  • A Beginner‘s Guide to Apache Kafka: 什么是Kafka、它為什么如此受歡迎、它在哪些場景下可以應(yīng)用、以及一些基本概念和術(shù)語

    作者:禪與計算機程序設(shè)計藝術(shù) Apache Kafka(以下簡稱Kafka)是一個開源分布式流處理平臺,它被設(shè)計用來實時傳輸大量的數(shù)據(jù),從而能夠?qū)崟r的對數(shù)據(jù)進行處理并提取價值。本文通過梳理,引導(dǎo)讀者了解什么是Kafka、它為什么如此受歡迎、它在哪些場景下可以應(yīng)用、以

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包