衡阳派盒市场营销有限公司

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kafka如何做到那么高的性能

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

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

那 Kafka 為什么這么快?如何做到這個高的性能?

本篇文章主要從這 3 個角度來分析:

生產端

服務端 Broker

消費端

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

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

(1)生產端 Producer

9b9fb5da-3358-11ed-ba43-dac502259ad0.jpgpartition寫入與消費

先來回顧下 Producer 生產者發(fā)送消息的流程:

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

選擇一個 Topic 的分區(qū) partitiion,默認是輪詢來負載均衡。

也可以指定一個分區(qū) key,根據 key 的 hash 值來分發(fā)到指定的分區(qū)。

也可以自定義 partition 來實現分區(qū)策略。

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

與所在機器的 Broker 的 socket 建立通信

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

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

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

調用 send() 方法時,不會立刻把消息發(fā)送出去,而是緩存起來,選擇恰當時機把緩存里的消息劃分成一批數據,按批次發(fā)送給服務端 Broker。

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

各種壓縮算法對比:

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

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

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

(2)服務端 Broker

Broker 的高性能主要從這 3 個方面體現:

PageCache 緩存

Kafka 的文件布局 以及 磁盤文件順序寫入

零拷貝 sendfile:加速消費流程

下面展開講講。

1)PageCache 加速消息讀寫

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

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

9bc7a68a-3358-11ed-ba43-dac502259ad0.jpg數據寫入

讀取文件的時候:也是從 PageCache 中來讀取數據。

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

2)Kafka 的文件布局 以及 磁盤文件順序寫入

文件布局如下圖所示:

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

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

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

相對比 RocketMQ: RocketMQ 在消息寫入時追求極致的順序寫,所有的消息不分主題一律順序寫入 commitlog 文件, topic 和 分區(qū)數量的增加不會影響寫入順序。

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

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

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

當不使用零拷貝技術讀取數據時:

9be1fa8a-3358-11ed-ba43-dac502259ad0.jpg數據讀取

流程如下:

消費端 Consumer:向 Kafka Broker 請求拉取消息

Kafka Broker 從 OS Cache 讀取消息到 應用程序的內存空間:

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

若 OS Cache 中無消息,則從磁盤里讀取

再通過網卡,socket 將數據發(fā)送給 消費端Consumer

當使用零拷貝技術讀取數據:

9bf816a8-3358-11ed-ba43-dac502259ad0.jpg數據讀取2

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

這樣不用將數據復制到用戶內存空間。

DMA 控制器直接完成數據復制,不需要 CPU 參與,速度更快。

(3)消費端 Consumer

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

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

舉個栗子:

有兩個 Kafka Broker,即有 2個機子

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

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

如上圖,舉例 4 中情況:

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

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

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

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

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89584
  • 壓縮
    +關注

    關注

    2

    文章

    102

    瀏覽量

    19428
  • kafka
    +關注

    關注

    0

    文章

    52

    瀏覽量

    5244

原文標題:Kafka 為什么那么快?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何做到一個好的照明設計

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

    kafka設計原理的深度探討

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

    請問I/Q demodulator如何做到頻率與相位的同步?

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

    基于閃存存儲的Apache Kafka性能提升方法

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

    Kafka的全局有序

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

    Bus/總線布線時如何做到等長

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

    手機是如何做到顯示電池剩余電量的

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

    小間距LED如何做到低亮

    小間距LED在我們日常生活中已經隨處可見。本文主要介紹了小間距LED的特點、小間距LED顯示屏優(yōu)勢以及小間距LED是如何做到低亮灰方法,最后則介紹了LED小間距技術的難點。
    發(fā)表于 12-28 10:07 ?4521次閱讀

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

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

    Kafka的概念及Kafka的宕機

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

    探究Kafka宕機引發(fā)的可用問題

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

    Kafka 的簡介

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

    Kafka性能背后的技術原理

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

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

    藍牙AOA定位系統(tǒng)是一種高精度的室內定位技術,其精準度是通過一系列高科技的技術和方法實現的。以下是給大家分析的幾點關于如何做到精準度的幾個關鍵點:
    的頭像 發(fā)表于 12-13 11:42 ?221次閱讀

    超詳細“零”基礎kafka入門篇

    響應數據流的實時流應用程序 要了解Kafka如何做這些事情,讓我們深入探討Kafka的能力。 (3)首先是幾個概念:
    的頭像 發(fā)表于 12-18 09:50 ?949次閱讀
    超詳細“零”基礎<b class='flag-5'>kafka</b>入門篇
    百家乐官网娱乐真钱游戏| 百家乐论坛官网| 金银岛娱乐城开户| 百家乐官网赌博器| 大发888娱乐场奖金| 怎样看百家乐官网路单| 老人头百家乐的玩法技巧和规则 | 678百家乐博彩娱乐网| 百家乐官网发牌的介绍| 百家乐比较好的网站| 网页百家乐官网| 百家乐游戏合法吗| 大发888娱乐城平台| 百家乐官网娱乐网代理佣金| 大发888国际| 百家乐官网单机游戏下| 大发888娱乐场下载zhidu| 户型风水不好害死人 24种破财户| bet365体育在线15| 金都百家乐现金网| 哈尔滨市| 百家乐永利娱乐| 澳门百家乐官网破解| 大发888代充| 百家乐官网桌布无纺布| 足彩大赢家| 合肥百家乐赌博游戏机| 百家乐官网推荐怎么看| 菲彩百家乐的玩法技巧和规则| 百家乐官网哪里可以玩| 88娱乐城2官方网站| 百家乐庄闲的冷热| 百家乐官网下载游戏| 方形百家乐筹码| 网上玩百家乐官网的玩法技巧和规则 | 百家乐筹码防伪定制| 网上百家乐官网注册彩金| 威尼斯人娱乐城免费注册| 百家乐官网网址官网| 百家乐官网起步多少| 永利高a1娱乐城送彩金|