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

Kafka 為什么那么快?

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

有人說(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)端

Kafka 為什么那么快?,kafka,分布式

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

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

Kafka 為什么那么快?,kafka,分布式

先來(lái)回顧下?Producer 生產(chǎn)者發(fā)送消息的流程:

  1. 首先指定消息發(fā)送到哪個(gè)?Topic。

  2. 選擇一個(gè)?Topic?的分區(qū)?partitiion,默認(rèn)是輪詢(xún)來(lái)負(fù)載均衡。

    也可以指定一個(gè)分區(qū)?key,根據(jù)?key?的?hash?值來(lái)分發(fā)到指定的分區(qū)。

    也可以自定義?partition?來(lái)實(shí)現(xiàn)分區(qū)策略。

  3. 找到這個(gè)分區(qū)的?leader partition

  4. 與所在機(jī)器的?Broker?的?socket?建立通信。

  5. 發(fā)送?Kafka?自定義協(xié)議格式的請(qǐng)求(包含攜帶的消息、批量消息)。

Kafka 為什么那么快?,kafka,分布式

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

  1. 批量發(fā)送:減少了與服務(wù)端?Broker?處理請(qǐng)求的次數(shù),從而提升總體的處理能力。

    調(diào)用?send()?方法時(shí),不會(huì)立刻把消息發(fā)送出去,而是緩存起來(lái),選擇恰當(dāng)時(shí)機(jī)把緩存里的消息劃分成一批數(shù)據(jù),按批次發(fā)送給服務(wù)端?Broker。

  2. 自定義協(xié)議格式:序列化方式和壓縮格式都能減少數(shù)據(jù)體積,從而節(jié)省網(wǎng)絡(luò)資源消耗。

各種壓縮算法對(duì)比:

  • 吞吐量方面:LZ4?>?Snappy?>?zstd?和?GZIP

  • 壓縮比方面:zstd?>?LZ4?>?GZIP?>?Snappy

Kafka 為什么那么快?,kafka,分布式

(2)服務(wù)端 Broker

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

  1. PageCache?緩存

  2. Kafka?的文件布局 以及 磁盤(pán)文件順序?qū)懭?/p>

  3. 零拷貝?sendfile:加速消費(fèi)流程

下面展開(kāi)講講。

1)PageCache 加速消息讀寫(xiě)

使用?PageCache?主要能帶來(lái)如下好處:

  • 寫(xiě)入文件的時(shí)候:操作系統(tǒng)會(huì)先把數(shù)據(jù)寫(xiě)入到內(nèi)存中的?PageCache,然后再一批一批地寫(xiě)到磁盤(pán)上,從而減少磁盤(pán)?IO?開(kāi)銷(xiāo)。

Kafka 為什么那么快?,kafka,分布式

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

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

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

文件布局如下圖所示:

Kafka 為什么那么快?,kafka,分布式

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

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

  • 相對(duì)比?RocketMQ?RocketMQ?在消息寫(xiě)入時(shí)追求極致的順序?qū)?,所有的消息不分主題一律順序?qū)懭?commitlog?文件,?topic?和 分區(qū)數(shù)量的增加不會(huì)影響寫(xiě)入順序。

  • 弊端:?Kafka?在消息寫(xiě)入時(shí)的?IO?性能,會(huì)隨著?topic?、分區(qū)數(shù)量的增長(zhǎng)先上升,后下降。

    所以使用?Kafka?時(shí),要警惕?Topic?和 分區(qū)數(shù)量。

3)零拷貝 sendfile:加速消費(fèi)流程

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

Kafka 為什么那么快?,kafka,分布式

流程如下:

  1. 消費(fèi)端?Consumer:向?Kafka Broker?請(qǐng)求拉取消息

  2. Kafka Broker?從?OS Cache?讀取消息到 應(yīng)用程序的內(nèi)存空間:

    1. 若?OS Cache?中有消息,則直接讀取

    2. 若?OS Cache?中無(wú)消息,則從磁盤(pán)里讀取

  3. 再通過(guò)網(wǎng)卡,socket?將數(shù)據(jù)發(fā)送給 消費(fèi)端Consumer

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

Kafka 為什么那么快?,kafka,分布式

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

  • 這樣不用將數(shù)據(jù)復(fù)制到用戶(hù)內(nèi)存空間。

  • DMA?控制器直接完成數(shù)據(jù)復(fù)制,不需要?CPU?參與,速度更快。


?

(3)消費(fèi)端 Consumer

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

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

舉個(gè)栗子:

  • 有兩個(gè)?Kafka Broker,即有 2個(gè)機(jī)子

  • 有一個(gè)主題:TOPICA,有 3 個(gè)分區(qū)(0, 1, 2)

Kafka 為什么那么快?,kafka,分布式

如上圖,舉例 4 中情況:

  1. group.id = 1,有一個(gè)消費(fèi)者:這個(gè)消費(fèi)者要處理所有數(shù)據(jù),即 3 個(gè)分區(qū)的數(shù)據(jù)。

  2. group.id = 2,有兩個(gè)消費(fèi)者:consumer 1消費(fèi)者需處理 2個(gè)分區(qū)的數(shù)據(jù),consumer2?消費(fèi)者需處理 1個(gè)分區(qū)的數(shù)據(jù)

  3. group.id = 3,有三個(gè)消費(fèi)者:消費(fèi)者數(shù)量與分區(qū)數(shù)量相等,剛好每個(gè)消費(fèi)者處理一個(gè)分區(qū)

  4. group.id = 4,有四個(gè)消費(fèi)者:消費(fèi)者數(shù)量 > 分區(qū)數(shù)量,第四個(gè)消費(fèi)者則會(huì)處于空閑狀態(tài)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-533148.html

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 分布式緩存:什么是它以及為什么需要它?

    ??隨著網(wǎng)絡(luò)的快速發(fā)展,分布式應(yīng)用變得越來(lái)越普遍。這種類(lèi)型的應(yīng)用程序需要訪問(wèn)多個(gè)組件和服務(wù),而這些組件可能分散在不同的物理位置上。在這種情況下,由于網(wǎng)絡(luò)通信的高延遲和低帶寬,性能問(wèn)題變得尤為明顯。為解決這一問(wèn)題,分布式緩存應(yīng)運(yùn)而生。 ??簡(jiǎn)單的

    2024年02月05日
    瀏覽(31)
  • 為什么會(huì)有分布式鎖?分布式鎖實(shí)現(xiàn)方案

    為什么會(huì)有分布式鎖?分布式鎖實(shí)現(xiàn)方案

    分布式鎖是控制分布式系統(tǒng)之間同步訪問(wèn)共享資源的一種方式。分布式環(huán)境下會(huì)出現(xiàn)資源競(jìng)爭(zhēng)的地方都需要分布式鎖的協(xié)調(diào)。 分布式鎖的作用:在整個(gè)系統(tǒng)提供一個(gè)全局、唯一的鎖,在分布式系統(tǒng)中每個(gè)系統(tǒng)在進(jìn)行相關(guān)操作的時(shí)候需要獲取到該鎖,才能執(zhí)行相應(yīng)操作。 服務(wù)

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

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

    2024年02月02日
    瀏覽(18)
  • 分布式 - 談?wù)勀銓?duì)分布式的理解,為什么引入分布式?

    分布式 - 談?wù)勀銓?duì)分布式的理解,為什么引入分布式?

    不啰嗦,我們直接開(kāi)始! 真正了解分布式系統(tǒng)的概念,日后工作中具有分布式系統(tǒng)設(shè)計(jì)思想。 能否在設(shè)計(jì)中對(duì)系統(tǒng)穩(wěn)定性方面考慮周全。 能構(gòu)建高 QPS 健壯的系統(tǒng)架構(gòu)。 問(wèn)題分析: 各種分布式框架層出不窮,Spring Cloud,阿里的 Dubbo,無(wú)論使用哪一個(gè),原理都相同,考察下基

    2024年02月15日
    瀏覽(28)
  • Kafka為什么這么快?

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

    2024年02月11日
    瀏覽(26)
  • 為什么選擇elasticsearch分布式搜索引擎

    為什么選擇elasticsearch分布式搜索引擎

    elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 例如: 在CSDN上搜索代碼 在電商網(wǎng)站搜索商品 在百度搜索答案 elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)

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

    kafka為什么如此之快?

    天下武功,唯快不破。同樣的,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è)老大。 那究竟

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

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

    2024年02月15日
    瀏覽(19)
  • (快手一面)分布式系統(tǒng)是什么?為什么要分布式系統(tǒng)?分布式環(huán)境下會(huì)有哪些問(wèn)題?分布式系統(tǒng)是如何實(shí)現(xiàn)事務(wù)的?

    《分布式系統(tǒng)原理與泛型》中這么定義分布式系統(tǒng): “ 分布式系統(tǒng)是若干獨(dú)立計(jì)算機(jī)的集合, 這些計(jì)算機(jī)對(duì)于用戶(hù)來(lái)說(shuō)就像單個(gè)相關(guān)系統(tǒng) ”, 分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。 就比如:用戶(hù)在使用京東這個(gè)分布式系統(tǒng)的時(shí)候,會(huì)感覺(jué)是在使用一

    2024年02月08日
    瀏覽(26)
  • 為什么需要分布式存儲(chǔ)技術(shù)?IPFS價(jià)值在哪?

    為什么需要分布式存儲(chǔ)技術(shù)?IPFS價(jià)值在哪?

    IPFS中文翻譯是星際文件系統(tǒng),是硬盤(pán)共享的互聯(lián)網(wǎng)底層協(xié)議,主要用于訪問(wèn)數(shù)據(jù)。簡(jiǎn)單來(lái)說(shuō),IPFS可以創(chuàng)建一個(gè)存儲(chǔ)網(wǎng)絡(luò),讓更多的人在分享閑置存儲(chǔ)空間的同時(shí)獲得收入。 這種人人都可以參與共享硬盤(pán)的存儲(chǔ)模式,稱(chēng)為分布式存儲(chǔ)。為什么我們需要這種分布式存儲(chǔ)技術(shù)?要

    2024年02月13日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包