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

面試官問(wèn):kafka為什么如此之快?

這篇具有很好參考價(jià)值的文章主要介紹了面試官問(wèn):kafka為什么如此之快?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

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

面試官問(wèn):kafka為什么如此之快?

那究竟是什么原因讓kafka如此之快呢?這也是面試官非常喜歡問(wèn)的問(wèn)題。

四個(gè)原因

原因一:磁盤順序讀寫

生產(chǎn)者發(fā)送數(shù)據(jù)到kafka集群中,最終會(huì)寫入到磁盤中,會(huì)采用順序?qū)懭氲姆绞?。消費(fèi)者從kafka集群中獲取數(shù)據(jù)時(shí),也是采用順序讀的方式。

無(wú)論是機(jī)械磁盤還是固態(tài)硬盤SSD,順序讀寫的速度都是遠(yuǎn)大于隨機(jī)讀寫的。因?yàn)閷?duì)于機(jī)械磁盤順序讀寫省去了磁頭頻繁尋址和旋轉(zhuǎn)盤片的開銷。而固態(tài)硬盤就更加復(fù)雜,這里不展開闡述。

下圖是網(wǎng)上關(guān)于讀寫方式的性能比較。

面試官問(wèn):kafka為什么如此之快?

  • 機(jī)械磁盤順序讀寫 53M/s,隨讀寫 316k/s
  • 固態(tài)硬盤順序讀寫 42M/s, 隨機(jī)讀寫 1000k/s

因而,由于kafka一般使用機(jī)械磁盤存儲(chǔ)消息,因?yàn)闄C(jī)械磁盤的價(jià)格遠(yuǎn)小于固態(tài)硬盤SSD。

原因二:PageCache頁(yè)緩存技術(shù)

前面提到了kafka采用順序讀寫寫入到磁盤中,難道是直接kafka到磁盤嗎,實(shí)際上不是的,中間多了一道操作系統(tǒng)的PageCache頁(yè)緩存,可以理解為內(nèi)存。

面試官問(wèn):kafka為什么如此之快?

  • 當(dāng)kafka有寫操作時(shí),先將數(shù)據(jù)寫入PageCache中,然后在定時(shí)方式順序?qū)懭氲酱疟P中。
  • 當(dāng)讀操作發(fā)生時(shí),先從PageCache中查找,如果找不到,再去磁盤中讀取。

通過(guò)頁(yè)緩存技術(shù),更近一步的提高了讀寫的性能。

原因三:零拷貝技術(shù)

kafka之所以快的另外一個(gè)原因是采用了零拷貝技術(shù)。

首先我們來(lái)看下從磁盤讀取數(shù)據(jù)到網(wǎng)卡場(chǎng)景下,傳統(tǒng)IO的整個(gè)過(guò)程,如下圖所示:

面試官問(wèn):kafka為什么如此之快?

傳統(tǒng)IO模型下,從磁盤讀取數(shù)據(jù),寫到網(wǎng)卡設(shè)備中,經(jīng)歷了4次用戶態(tài)和內(nèi)核態(tài)之間的切換,以及4次數(shù)據(jù)的拷貝,包括CPU拷貝和DMA拷貝。這些操作都是十分損耗性能。

DMA, Direct Memory Access, 直接內(nèi)存訪問(wèn)是一些計(jì)算機(jī)總線架構(gòu)提供的功能,它能使數(shù)據(jù)從附加設(shè)備(如磁盤驅(qū)動(dòng)器)直接發(fā)送到計(jì)算機(jī)主板的內(nèi)存上。

那能否減少這樣的切換和拷貝呢? 答案是肯定的,不知道大家發(fā)下沒(méi)有,kafka的消息在應(yīng)用層做任何轉(zhuǎn)換,怎么存就怎么取,你看連序列化、反序列化都是在生產(chǎn)者和消費(fèi)者做的。所以kafka采用了sendfile的零拷貝技術(shù)

面試官問(wèn):kafka為什么如此之快?

sendfile零拷貝技術(shù)在內(nèi)核態(tài)將數(shù)據(jù)從PageCache拷貝到了Socket緩沖區(qū),這樣就大大減少了不同形態(tài)的切換以及拷貝。

所謂的零拷貝技術(shù)不是指不發(fā)生拷貝,而是在用戶態(tài)沒(méi)有進(jìn)行拷貝。

原因四:kafka分區(qū)架構(gòu)和批量操作

一方面kafka的集群架構(gòu)采用了多分區(qū)技術(shù),并行度高。另外一方面,kafka采用了批量操作。生產(chǎn)者發(fā)送的消息先發(fā)送到一個(gè)隊(duì)列,然后有sender線程批量發(fā)送給kafka集群。

面試官問(wèn):kafka為什么如此之快?

如何提高生產(chǎn)者的吞吐量?

kafka生產(chǎn)者提供的一些配置參數(shù)可以有助于提高生產(chǎn)者的吞吐量。

參數(shù)名稱 描述
buffer.memory RecordAccumulator 緩沖區(qū)總大小,默認(rèn) 32m。適當(dāng)增加該值,可以提高吞吐量。
batch.size 緩沖區(qū)一批數(shù)據(jù)最大值,默認(rèn) 16k。適當(dāng)增加該值,可以提高吞吐量,但是如果該值設(shè)置太大,會(huì)導(dǎo)致數(shù)據(jù)傳輸延遲增加。
linger.ms 如果數(shù)據(jù)遲遲未達(dá)到 batch.sizesender線程等待 linger.time之后就會(huì)發(fā)送數(shù)據(jù)。單位 ms,默認(rèn)值是 0ms,表示沒(méi)有延遲。生產(chǎn)環(huán)境建議該值大小為 5-100ms 之間。
compression.type 指定消息的壓縮方式,默認(rèn)值為“none ",即默認(rèn)情況下,消息不會(huì)被壓縮。該參數(shù)還可以配置為 "gzip","snappy" 和 "lz4"。對(duì)消息進(jìn)行壓縮可以極大地減少網(wǎng)絡(luò)傳輸、降低網(wǎng)絡(luò) I/O,從而提高整體的性能 。

如何提高消費(fèi)者的吞吐量?

  1. 如果是Kafka消費(fèi)能力不足,則可以考慮增加Topic的分區(qū)數(shù),并且同時(shí)提升消費(fèi)組的消費(fèi)者數(shù)量,消費(fèi)者數(shù) = 分區(qū)數(shù),并發(fā)度最高
  2. 如果是下游的數(shù)據(jù)處理不及時(shí):提高每批次拉取的數(shù)量。批次拉取數(shù)據(jù)過(guò)少,使處理的數(shù)據(jù)小于生產(chǎn)的數(shù)據(jù),也會(huì)造成數(shù)據(jù)積壓。
  • fetch.max.bytes:默認(rèn) Default: 52428800(50 m)。消費(fèi)者獲取服務(wù)器端一批消息最大的字節(jié)數(shù)。如果服務(wù)器端一批次的數(shù)據(jù)大于該值(50m)仍然可以拉取回來(lái)這批數(shù)據(jù),因此,這不是一個(gè)絕、對(duì)最大值。一批次的大小受 message.max.bytes (broker config)or max.message.bytes (topic config)影響。
  • max.poll.records:一次 poll 拉取數(shù)據(jù)返回消息的最大條數(shù),默認(rèn)是 500
  1. 優(yōu)化消費(fèi)者代碼處理的邏輯。

總結(jié)

本文總結(jié)了Kafka為什么快的原因,4個(gè)關(guān)鍵字,磁盤順序讀寫,頁(yè)緩存技術(shù),零拷貝技術(shù),Kafka本身分區(qū)機(jī)制和批量操作。我們抓住這4個(gè)關(guān)鍵字,有點(diǎn)到面地和面試官娓娓道來(lái)。

Kafka 在性能上確實(shí)是一騎絕塵,但在消息選型過(guò)程中,我們不僅僅要參考其性能,還有從功能性上來(lái)考慮,例如 RocketMQ 提供了豐富的消息檢索功能、事務(wù)消息、消息消費(fèi)重試、定時(shí)消息等。

通常在大數(shù)據(jù)、流式處理場(chǎng)景基本選用 Kafka,業(yè)務(wù)處理相關(guān)選擇 RocketMQ更佳。

歡迎關(guān)注個(gè)人公眾號(hào)【JAVA旭陽(yáng)】交流學(xué)習(xí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-472086.html

到了這里,關(guān)于面試官問(wèn):kafka為什么如此之快?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

    有人說(shuō):他曾在一臺(tái)配置較好的機(jī)子上對(duì) Kafka 進(jìn)行性能壓測(cè),壓測(cè)結(jié)果是 Kafka 單個(gè)節(jié)點(diǎn)的極限處理能力接近每秒 2000萬(wàn) 條消息,吞吐量達(dá)到每秒 600MB。 那 Kafka 為什么這么快?如何做到這個(gè)高的性能? 本篇文章主要從這 3 個(gè)角度來(lái)分析: 生產(chǎn)端 服務(wù)端 Broker 消費(fèi)端 先來(lái)看下

    2024年01月22日
    瀏覽(25)
  • 什么是 sudo,為什么它如此重要?

    什么是 sudo,為什么它如此重要?

    在當(dāng)今的技術(shù)世界中,Linux 操作系統(tǒng)廣泛應(yīng)用于各種環(huán)境,包括個(gè)人計(jì)算機(jī)、服務(wù)器和嵌入式設(shè)備。作為一種強(qiáng)大的開源操作系統(tǒng),Linux 提供了豐富的安全功能,以保護(hù)系統(tǒng)和用戶的數(shù)據(jù)安全。在 Linux 安全領(lǐng)域中,sudo 是一項(xiàng)關(guān)鍵的安全工具,它在用戶權(quán)限管理和系統(tǒng)保護(hù)方

    2024年02月06日
    瀏覽(20)
  • 大數(shù)據(jù)為什么如此重要?

    大數(shù)據(jù)為什么如此重要?

    簡(jiǎn)單來(lái)說(shuō),大數(shù)據(jù)就是結(jié)構(gòu)化的傳統(tǒng)數(shù)據(jù)再加上非結(jié)構(gòu)化的新數(shù)據(jù)。那么傳統(tǒng)數(shù)據(jù)和新數(shù)據(jù)又是什么呢?傳統(tǒng)數(shù)據(jù)就是IT業(yè)務(wù)系統(tǒng)里面的數(shù)據(jù),如客戶資料、財(cái)務(wù)數(shù)據(jù)等。這些數(shù)據(jù)是結(jié)構(gòu)化的,量也不是特別大,一般只是TB級(jí)。對(duì)比傳統(tǒng)數(shù)據(jù),還有一種叫“新數(shù)據(jù)”,是來(lái)源于

    2024年02月08日
    瀏覽(21)
  • 什么是可視化編程?為什么它如此重要?

    什么是可視化編程?為什么它如此重要?

    可視化編程,又叫可視化程序設(shè)計(jì),一直以來(lái)就是備受討論的“熱門技術(shù)”。一方面,程序員抵觸它,覺得它不如用代碼開發(fā)。另一方面,對(duì)于產(chǎn)品經(jīng)理等稍微懂點(diǎn)開發(fā)的業(yè)余人員,它確實(shí)能提供價(jià)值。所以,它到底是什么呢?本文將從可視化編程的定義、應(yīng)用、優(yōu)勢(shì)等三個(gè)

    2024年02月12日
    瀏覽(19)
  • Hadoop為什么如此流行——史上最詳解

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) Hadoop是一個(gè)開源的分布式計(jì)算框架,其出現(xiàn)主要是為了解決海量數(shù)據(jù)的存儲(chǔ)、計(jì)算、分析、和處理問(wèn)題。隨著互聯(lián)網(wǎng)的數(shù)據(jù)量不斷增加,分布式系統(tǒng)越來(lái)越普及,Hadoop也越來(lái)越受到青睞。它具備高容錯(cuò)性、高可靠性、彈性擴(kuò)展等特性,能夠適應(yīng)

    2024年02月08日
    瀏覽(19)
  • 僵尸進(jìn)程?孤兒進(jìn)程?為什么他有如此慘烈的身世...

    僵尸進(jìn)程?孤兒進(jìn)程?為什么他有如此慘烈的身世...

    ??作者簡(jiǎn)介: 花想云 ,在讀本科生一枚,C/C++領(lǐng)域新星創(chuàng)作者,新星計(jì)劃導(dǎo)師,阿里云專家博主,CSDN內(nèi)容合伙人…致力于 C/C++、Linux 學(xué)習(xí)。 ?? 專欄簡(jiǎn)介:本文收錄于 Linux從入門到精通 ,本專欄主要內(nèi)容為本專欄主要內(nèi)容為L(zhǎng)inux的系統(tǒng)性學(xué)習(xí),專為小白打造的文章專欄。

    2024年02月05日
    瀏覽(96)
  • 為什么如此安全的https協(xié)議卻仍然可以被抓包呢?(1)

    為什么如此安全的https協(xié)議卻仍然可以被抓包呢?(1)

    好了,閱讀到了這里,說(shuō)明你對(duì)https已經(jīng)非常熟悉了,那么你一定知道,https協(xié)議是結(jié)合了非對(duì)稱加密和對(duì)稱加密一起工作,從而保證數(shù)據(jù)傳輸?shù)陌踩缘摹?非對(duì)稱加密用于確保客戶端可以安全地獲取到服務(wù)器的真實(shí)公鑰。對(duì)稱加密用于確保客戶端和服務(wù)器之間的數(shù)據(jù)傳輸不

    2024年04月26日
    瀏覽(24)
  • 拆解Spring boot:Springboot為什么如此絲滑而簡(jiǎn)單?源碼剖析解讀自動(dòng)裝配

    拆解Spring boot:Springboot為什么如此絲滑而簡(jiǎn)單?源碼剖析解讀自動(dòng)裝配

    ????歡迎光臨,終于等到你啦???? ??我是蘇澤,一位對(duì)技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個(gè)人主頁(yè)可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.csdn

    2024年03月23日
    瀏覽(24)
  • 『Linux從入門到精通』第 ? 期 - 僵尸進(jìn)程?孤兒進(jìn)程?為什么他有如此慘烈的身世...

    『Linux從入門到精通』第 ? 期 - 僵尸進(jìn)程?孤兒進(jìn)程?為什么他有如此慘烈的身世...

    ??作者簡(jiǎn)介: 花想云 ,在讀本科生一枚,C/C++領(lǐng)域新星創(chuàng)作者,新星計(jì)劃導(dǎo)師,阿里云專家博主,CSDN內(nèi)容合伙人…致力于 C/C++、Linux 學(xué)習(xí)。 ?? 專欄簡(jiǎn)介:本文收錄于 Linux從入門到精通 ,本專欄主要內(nèi)容為本專欄主要內(nèi)容為L(zhǎng)inux的系統(tǒng)性學(xué)習(xí),專為小白打造的文章專欄。

    2024年02月16日
    瀏覽(20)
  • kafka為什么快

    消息發(fā)送 1、批量發(fā)送: Kafka 通過(guò)將多個(gè)消息打包成一個(gè)批次,減少了網(wǎng)絡(luò)傳輸和磁盤寫入的次數(shù),從而提高了消息的吞吐量和傳輸效率。 2、異步發(fā)送: 生產(chǎn)者可以異步發(fā)送消息,不必等待每個(gè)消息的確認(rèn),這大大提高了消息發(fā)送的效2.率 3、消息壓縮: 支持對(duì)消息進(jìn)行壓縮,

    2024年02月02日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包