kafka性能調優(yōu)解密(二)-- Producer端

      網(wǎng)友投稿 991 2022-05-28

      Producer篇

      1? acks

      Ack為0的時候應該性能最優(yōu),但沒有可靠性保證;

      Ack為1的時候只保證leader已經(jīng)把數(shù)據(jù)寫入,但沒有確保各個副本已經(jīng)寫入,如果此時leader所在broker宕機,會丟失數(shù)據(jù)。

      Ack為-1的時候,會保證所有的in-sync副本都寫入成功才返回。這個參數(shù)性能最差,但可靠性是最高的

      1.在2個機器分別部署2個broker,創(chuàng)建10個分區(qū)的topic

      2.客戶端在另一個機器上進行發(fā)送消息測試。 通過修改消息長度和ACK不同的值,檢查ack對性能的影響。

      1G網(wǎng)卡下,采用New Producer共發(fā)1000000條,batch.size為16k。

      Ack

      message.sizes

      MB.sec

      nMsg.sec

      性能下降比

      0

      2048

      88.4087

      45265.2544

      /

      1

      2048

      67.4981

      34559.0268

      0.236522

      -1

      2048

      20.8556

      10678.0566

      0.7641

      0

      4096

      85.8007

      21964.9878

      /

      1

      4096

      74.745

      19134.7276

      0.128853

      -1

      4096

      19.0526

      4877.4778

      0.777943

      0

      8192

      87.1386

      11153.7432

      /

      1

      8192

      54.1993

      6937.5069

      0.378011

      -1

      8192

      15.3464

      1964.3394

      0.823885

      可以看出性能結果和原理分析中的結論是一致的,ack為0的時候最好,1次之,-1最差。

      從測試數(shù)據(jù)中可以得到如下結論:

      隨著ACK的值增多,在集群中性能會下降,但消息可靠性增強,對可靠性和性能都要有要求的,推薦ack設置為1,這個也是默認值;業(yè)務允許節(jié)點異常時丟失少量數(shù)據(jù),并且對性能要求很高的,可以用0。

      2? batch.size

      參數(shù)

      默認值

      推薦值

      說明

      batch.size

      16384

      524288

      producer將試圖批處理消息記錄,以減少請求次數(shù)。這將改善client與server之間的性能。這項配置控制默認的批量處理消息字節(jié)數(shù)。

      不會試圖處理大于這個字節(jié)數(shù)的消息字節(jié)數(shù)。

      發(fā)送到brokers的請求將包含多個批量處理,其中會包含對每個partition的一個請求。

      較小的批量處理數(shù)值比較少用,并且可能降低吞吐量(0則會僅用批量處理)。較大的批量處理數(shù)值將會浪費更多內存空間,這樣就需要分配特定批量處理數(shù)值的內存大小。

      Producer創(chuàng)建一個BufferPool,totalSize為buffer.memory, 在這個pool里創(chuàng)建很多batch,每個batch大小就是batch.size。這個值越大,可以有效減少tcp傳輸次數(shù)。但是也不是越大越好,會造成內存浪費,因為linger.ms配置成0則會不等待batch.size裝滿就馬上發(fā)送,導致每次發(fā)送batch buffer里有空閑;同時如果不夠內存,會被block住影響性能

      1.?在2個機器分別部署2個broker,客戶端在另一個機器上進行發(fā)送消息測試。 通過修改batch.size的值,檢查這個參數(shù)對性能的影響。

      2. 創(chuàng)建一個10個分區(qū)的topic

      10G網(wǎng)卡下,2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個

      Batch.size為512k的時候,磁盤IO監(jiān)控圖為:

      可以看出此時sda這一塊盤的使用已達100%

      10G網(wǎng)卡下,4k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個

      Batch.size為512k的時候,磁盤IO監(jiān)控圖為:

      分析結論:

      1.從2k和4k的測試結果來看,峰值都出現(xiàn)在512k batch_size中。 此時查看磁盤,發(fā)現(xiàn)util 已經(jīng)達到100%,磁盤成為瓶頸

      2.batch_size過大,除了空間浪費外,還會導致BufferPool中可用的batch過少,導致發(fā)送速度快的時候分配內存不足的情況發(fā)生概率增大,發(fā)生被卡住

      3? buffer.memory

      參數(shù)

      默認值

      推薦值

      說明

      buffer.memory

      33554432

      128M~1G

      producer可以用來緩存數(shù)據(jù)的內存大小。如果數(shù)據(jù)產(chǎn)生速度大于向broker發(fā)送的速度,producer會阻塞或者拋出異常,以“block.on.buffer.full”來表明。

      這項設置將和producer能夠使用的總內存相關,但并不是一個硬性的限制,因為不是producer使用的所有內存都是用于緩存。一些額外的內存會用于壓縮(如果引入壓縮機制),同樣還有一些用于維護請求。

      Producer對象創(chuàng)建BufferPool指定的內存大小,如果這個值設置的過小,會導致內存分配不足,在block.on.buffer.full為TRUE的情況下就會阻塞發(fā)送影響性能。設置過大的話會導致浪費內存

      kafka性能調優(yōu)解密(二)-- Producer端

      1. 2個broker的場景下,創(chuàng)建10個分區(qū)的topic

      2. 通過固定batch size,然后調大 buffer.memory,查看tps的變化

      10G網(wǎng)卡下,2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個,batchsize為512k

      10G網(wǎng)卡下2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個,batchsize為256k

      可以看出buffer.memory設置過少,會導致tps很低,只有3w多;但設置很大,tps也不能一直提升。

      分析結論:

      1.?????? buffer.memory 調的過小對性能會影響很大,因為內存不足就會導致發(fā)送被block(block.on.buffer.full為TRUE)

      2.?????? 設置過大的buffer.memory對性能提高幫助不是很大,只要夠用就好。 可以根據(jù)batch size比默認值提高多少倍,而相應提高buffer.memory多少倍即可

      4? send.buffer.bytes

      參數(shù)

      默認值

      推薦值

      說明

      send.buffer.bytes

      131072

      默認值或者略大于帶寬*時延

      TCP send緩存大小,當發(fā)送數(shù)據(jù)時使用

      TCP窗口

      1、接收窗口

      1)泛指接收緩沖區(qū)的大小。

      2)接收緩沖區(qū)能夠接收的數(shù)據(jù)字節(jié)數(shù)(接收緩沖區(qū)空出的字節(jié)數(shù)),實質上就是接收緩沖區(qū)的大小減去未送往應用層數(shù)據(jù)部分。又稱為通告窗口。

      2、發(fā)送窗口

      1)泛指發(fā)送緩沖區(qū)的大小。

      2)可發(fā)送的數(shù)據(jù)就處于發(fā)送窗口中,發(fā)送窗口大小指的就是可發(fā)送的數(shù)據(jù)量。

      BDP:Bandwidth Delay Product,即帶寬時延乘積。

      BDP=帶寬×時延

      帶寬:是指瓶頸帶寬,無線網(wǎng)絡中一般空口是瓶頸,因此對應空口帶寬。

      時延:是指系統(tǒng)的環(huán)回時長RTT0,即:TCP

      發(fā)出一個數(shù)據(jù)包到收到對應ACK的時長,約

      等于PING環(huán)回時長。

      在TCP序號-時間圖上,以帶寬為斜率畫一個直角三角形,其斜邊的斜率等于帶寬,水平直角邊的長度等于時延RTT0,則垂直直角邊的長度就等于BDP。

      1.?????? TCP窗口< BDP

      受限于TCP窗口大小,TCP速率達不到帶寬。

      TCP穩(wěn)態(tài)速率=TCP窗口/RTT0

      TCP穩(wěn)態(tài)速率隨著TCP窗口的增大而增大,直至TCP窗口=BDP。

      2.?????? TCP窗口= BDP

      TCP穩(wěn)態(tài)速率=瓶頸帶寬。

      3.?????? TCP窗口> BDP

      當TCP窗口>BDP時,TCP穩(wěn)態(tài)速率會不會進一步增大而超過瓶頸帶寬呢?當然不會,速率還是會穩(wěn)定在瓶頸帶寬。

      那會帶來什么影響呢? RTT的增大!

      RTT=TCP窗口/帶寬

      原則如下:

      1、發(fā)送緩沖區(qū)和接收緩沖區(qū)的大小一般設置為相同的值。

      2、緩沖區(qū)的大小一般設置為略大于BDP。

      TCP緩沖區(qū)設置過大越大越好嗎?

      緩沖區(qū)設置過大會導致RTT增加,帶來兩個弊端:

      1)丟包重傳時速率恢復會變慢,因為重傳包也會在緩沖區(qū)中排隊發(fā)送。

      2)會導致RTT測量變得遲鈍,無法跟上系統(tǒng)時延的變化,造成無謂的重傳或重傳不及時。

      1.?? 2個broker 創(chuàng)建10個分區(qū)的topic

      2.?? 在上面batch_size最好為512k 和 默認值的情況下,調整send.buffer.bytes,查看性能

      10G網(wǎng)卡下,2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個,batchsize為16k, buffer.memory為32M

      10G網(wǎng)卡下,2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個,batchsize為512k, buffer.memory為1024M

      其中實測時延為0.032ms,帶寬為10G,那么:

      BDP = 10G * 0.032ms = 337k

      從上面的測試可以看出128k~512k的send buffer,性能已經(jīng)在峰值附近

      結論:

      1. send buffer采用默認值與broker 的receiver buffer默認值(100k)相對,性能在這個場景下是峰值

      2.? 可以根據(jù)BDP的計算公式,然后配置send buffer與receiver buffer略大于BDP大小

      5.? receive.buffer.bytes

      參數(shù)

      默認值

      推薦值

      說明

      receive.buffer.bytes

      32768

      默認值

      TCP receive緩存大小,當閱讀數(shù)據(jù)時使用

      生產(chǎn)者的Receiver buffer 一般對生產(chǎn)者影響不是很大,因為只有響應信息返回。

      1. 2個broker 創(chuàng)建10個分區(qū)的topic

      2.? 在上面batch_size最好為512k 和 默認值的情況下,調整receive.buffer.bytes,查看性能

      10G網(wǎng)卡下,2k數(shù)據(jù),共發(fā)1000000條,線程數(shù)為10個,batchsize為512k, bufferMem為32M, send.buffer為128k

      結論:

      與理論分析差不多,設置比較小對性能也影響不大,采用默認值即可

      緩存 應用性能調優(yōu) Kafka 存儲

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      上一篇:基因數(shù)據(jù)分析軟件遷移-stringtie
      下一篇:HBase學習入門之HBase體系結構
      相關文章
      久久亚洲私人国产精品vA| 国产亚洲日韩在线三区| 亚洲av一综合av一区| 小说专区亚洲春色校园| 日韩欧美亚洲中文乱码| 中中文字幕亚洲无线码| 亚洲AV成人一区二区三区在线看| 456亚洲人成影院在线观| 亚洲一区精品视频在线| 精品久久久久久亚洲精品| 亚洲自偷精品视频自拍| 亚洲精品456在线播放| 亚洲精品福利网站| 亚洲人成网站在线观看播放动漫| 亚洲伊人久久精品| 亚洲一级毛片视频| 亚洲色偷精品一区二区三区| 亚洲精品色播一区二区| 国产精品无码亚洲精品2021| 亚洲?V乱码久久精品蜜桃| 亚洲国产精品自产在线播放| 国产成人精品亚洲精品| 亚洲色欲色欲www在线丝| 亚洲国产精品一区二区成人片国内| 亚洲国产综合无码一区| 亚洲∧v久久久无码精品| 777亚洲精品乱码久久久久久| 亚洲第一成年网站大全亚洲| 亚洲av永久无码嘿嘿嘿| 色婷五月综激情亚洲综合 | 亚洲成a人片在线不卡一二三区 | 亚洲精品国产第一综合99久久| 亚洲日韩一区二区三区| 国产精品无码亚洲精品2021| 国产精品亚洲二区在线观看 | 亚洲熟妇无码AV不卡在线播放| 在线观看亚洲精品专区| 国产黄色一级毛片亚洲黄片大全| 亚洲毛片αv无线播放一区| 亚洲AV人无码综合在线观看| 91久久亚洲国产成人精品性色|