RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kafka如何做到那么高的性能

Android編程精選 ? 來(lái)源:Android編程精選 ? 作者:Android編程精選 ? 2022-09-14 17:03 ? 次閱讀

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

9b83e396-3358-11ed-ba43-dac502259ad0.jpg

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

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

9b9fb5da-3358-11ed-ba43-dac502259ad0.jpgpartition寫入與消費(fèi)

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

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

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

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

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

找到這個(gè)分區(qū)的 leader partition。

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

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

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

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

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

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

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

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

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

9bb47ccc-3358-11ed-ba43-dac502259ad0.jpg

(2)服務(wù)端 Broker

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

PageCache 緩存

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

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

下面展開講講。

1)PageCache 加速消息讀寫

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

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

9bc7a68a-3358-11ed-ba43-dac502259ad0.jpg數(shù)據(jù)寫入

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

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

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

文件布局如下圖所示:

9bd527b0-3358-11ed-ba43-dac502259ad0.jpg

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

Kafka 在分區(qū)級(jí)別實(shí)現(xiàn)文件順序?qū)懀杭炊鄠€(gè)文件同時(shí)寫入,更能發(fā)揮磁盤 IO 的性能。

相對(duì)比 RocketMQ: RocketMQ 在消息寫入時(shí)追求極致的順序?qū)懀械南⒉环种黝}一律順序?qū)懭?commitlog 文件, topic 和 分區(qū)數(shù)量的增加不會(huì)影響寫入順序。

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

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

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

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

9be1fa8a-3358-11ed-ba43-dac502259ad0.jpg數(shù)據(jù)讀取

流程如下:

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

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

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

若 OS Cache 中無(wú)消息,則從磁盤里讀取

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

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

9bf816a8-3358-11ed-ba43-dac502259ad0.jpg數(shù)據(jù)讀取2

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

這樣不用將數(shù)據(jù)復(fù)制到用戶內(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)

9c09cc36-3358-11ed-ba43-dac502259ad0.jpg

如上圖,舉例 4 中情況:

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

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

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

group.id = 4,有四個(gè)消費(fèi)者:消費(fèi)者數(shù)量 > 分區(qū)數(shù)量,第四個(gè)消費(fèi)者則會(huì)處于空閑狀態(tài)

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7002

    瀏覽量

    88941
  • 壓縮
    +關(guān)注

    關(guān)注

    2

    文章

    102

    瀏覽量

    19373
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    5214

原文標(biāo)題:Kafka 為什么那么快?

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何做到一個(gè)好的照明設(shè)計(jì)

    如何做到一個(gè)好的照明設(shè)計(jì),本文中作者從一個(gè)較高的角度為讀者詳細(xì)講解了設(shè)計(jì)過(guò)程的整個(gè)構(gòu)思。
    發(fā)表于 09-13 13:58 ?1153次閱讀

    kafka設(shè)計(jì)原理的深度探討

    Kafka簡(jiǎn)介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O(1)的方式提供消息持久化能力,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪問(wèn)性能
    的頭像 發(fā)表于 10-08 07:50 ?2002次閱讀
    <b class='flag-5'>kafka</b>設(shè)計(jì)原理的深度探討

    請(qǐng)問(wèn)I/Q demodulator如何做到頻率與相位的同步?

    請(qǐng)問(wèn)各位I/Qdemodulator 如何做到頻率與相位的同步?頻率可以使用頻綜做到本振與載波的頻率一致,但是相位如何保證,如果有一個(gè)固定的相位差,那么星座圖將有一個(gè)角度的轉(zhuǎn)動(dòng),請(qǐng)問(wèn)這個(gè)問(wèn)題是在數(shù)字域解決的還是有其他方法?謝謝!
    發(fā)表于 09-28 15:01

    基于閃存存儲(chǔ)的Apache Kafka性能提升方法

    作者:Dennis Lattka我是美光科技的首席存儲(chǔ)解決方案工程師Dennis Lattka。這個(gè)頭銜的真正含義是,我要致力于確定如何利用閃存存儲(chǔ)改善工作負(fù)載應(yīng)用的性能和結(jié)果。為此,我決定對(duì)大數(shù)
    發(fā)表于 07-24 06:58

    Kafka的全局有序

    Kafka如何做到全局有序
    發(fā)表于 10-24 13:51

    Bus/總線布線時(shí)如何做到等長(zhǎng)

    Bus/總線布線時(shí)如何做到等長(zhǎng) Bus走線模式是在13.6版本中可以實(shí)現(xiàn)的模式,現(xiàn)在14.x以及15.0都已
    發(fā)表于 09-28 12:45 ?1682次閱讀

    手機(jī)是如何做到顯示電池剩余電量的

    手機(jī)是如何做到顯示電池剩余電量的
    發(fā)表于 01-22 21:11 ?26次下載

    小間距LED如何做到低亮

    小間距LED在我們?nèi)粘I钪幸呀?jīng)隨處可見。本文主要介紹了小間距LED的特點(diǎn)、小間距LED顯示屏優(yōu)勢(shì)以及小間距LED是如何做到低亮灰方法,最后則介紹了LED小間距技術(shù)的難點(diǎn)。
    發(fā)表于 12-28 10:07 ?4477次閱讀

    最美布線, 別人是如何做到

    最美布線,別人是如何做到
    的頭像 發(fā)表于 02-28 16:47 ?2280次閱讀

    Kafka的概念及Kafka的宕機(jī)

    很好奇Kafka可用實(shí)現(xiàn)和保障。從 Kafka 部署后,系統(tǒng)內(nèi)部使用的 Kafka 一直運(yùn)行穩(wěn)定,沒(méi)有出現(xiàn)不可用的情況。 但最近系統(tǒng)測(cè)試人員常反饋偶有
    的頭像 發(fā)表于 08-27 11:21 ?2093次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機(jī)

    探究Kafka宕機(jī)引發(fā)的可用問(wèn)題

    一、Kafka宕機(jī)引發(fā)的可用問(wèn)題 問(wèn)題要從一次Kafka的宕機(jī)開始說(shuō)起。 筆者所在的是一家金融科技公司,但公司內(nèi)部并沒(méi)有采用在金融支付領(lǐng)域更為流行的RabbitMQ ,而是采用了設(shè)計(jì)之初就為日志
    的頭像 發(fā)表于 10-20 15:41 ?1465次閱讀

    Kafka 的簡(jiǎn)介

    ,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪問(wèn)性能 吞吐率。即使在非常廉價(jià)的機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸 支持Kafka Server間的消息分區(qū),及分布式消費(fèi),同時(shí)
    的頭像 發(fā)表于 07-03 11:10 ?605次閱讀
    <b class='flag-5'>Kafka</b> 的簡(jiǎn)介

    Kafka性能背后的技術(shù)原理

    Kafka 是一款性能非常優(yōu)秀的消息隊(duì)列,每秒處理的消息體量可以達(dá)到千萬(wàn)級(jí)別。
    的頭像 發(fā)表于 10-23 09:37 ?315次閱讀
    <b class='flag-5'>Kafka</b>高<b class='flag-5'>性能</b>背后的技術(shù)原理

    藍(lán)牙AOA定位系統(tǒng)如何做到精準(zhǔn)度?

    藍(lán)牙AOA定位系統(tǒng)是一種高精度的室內(nèi)定位技術(shù),其精準(zhǔn)度是通過(guò)一系列高科技的技術(shù)和方法實(shí)現(xiàn)的。以下是給大家分析的幾點(diǎn)關(guān)于如何做到精準(zhǔn)度的幾個(gè)關(guān)鍵點(diǎn):
    的頭像 發(fā)表于 12-13 11:42 ?103次閱讀

    超詳細(xì)“零”基礎(chǔ)kafka入門篇

    響應(yīng)數(shù)據(jù)流的實(shí)時(shí)流應(yīng)用程序 要了解Kafka如何做這些事情,讓我們深入探討Kafka的能力。 (3)首先是幾個(gè)概念:
    的頭像 發(fā)表于 12-18 09:50 ?149次閱讀
    超詳細(xì)“零”基礎(chǔ)<b class='flag-5'>kafka</b>入門篇
    RM新时代网站-首页