5種kafka消費端性能優化方法

来源:https://www.cnblogs.com/huaweiyun/archive/2022/09/21/16716343.html
-Advertisement-
Play Games

摘要:帶你瞭解基於FusionInsight HD&MRS的5種kafka消費端性能優化方法。 本文分享自華為雲社區《FusionInsight HD&MRSkafka消費端性能優化方法》,作者: 穿夾克的壞猴子。 kafka消費端性能優化主要從下麵幾個方面優化: 1.介面使用方面優化: 舊版本hi ...


摘要:帶你瞭解基於FusionInsight HD&MRS的5種kafka消費端性能優化方法。

本文分享自華為雲社區《FusionInsight HD&MRSkafka消費端性能優化方法》,作者: 穿夾克的壞猴子。

kafka消費端性能優化主要從下麵幾個方面優化:

1.介面使用方面優化:

舊版本highlevel-consumer:偏移量信息存儲在zookeeper,最大消費線程數與分區數量相同,不推薦

舊版本simpleconsumer:自行選擇存儲偏移量的方式,可以實現多線程消費單分區,若無特殊的性能要求,不推薦

新版本highlevel-consumer:偏移量信息存儲在kafka指定的topic中,預設情況下最大消費線程數與分區數量相同,可以實現多線程消費單分區,推薦

2.參數調優(以下參數需根據現網環境評估調至合適的值):

2.1 舊版本消費者(kafka old API)參數調優

fetch.message.max.bytes:該參數為一次性從kafka集群中獲取的數據塊大小。在升級到651版本後這個參數需要調大,否則容易出現獲取數據限制的報錯。建議調整大小不小於kafka的服務端參數message.max.bytes。

註意如何確認為舊版本:如果生產者的配置方式包含如下這些配置,則為舊版本:group.id/zookeeper.connect

2.2 新版本參數(kafka new API)參數調優

max.poll.records:意味消費者一次poll()操作,能夠獲取的最大數據量,調整這個值能提升吞吐量,於此同時也需要同步提升max.poll.interval.ms的參數大小。

fetch.max.bytes:意味server端可返回給consumer的最大數據大小,增加可以提升吞吐量,但是在客戶端和服務端網路延遲比較大的環境下,建議可以減小該值,防止業務處理數據超時。

heartbeat.interval.ms:消費超時時間,consumer與kafka之間的超時時間,該參數不能超過session.timeout.ms,通常設置為session.timeout.ms的三分之一,預設值:3000。

max.partition.fetch.bytes:限制每個consumer發起fetch請求時候,讀到數據(record)的限制,設置過大,consumer本地緩存的數據就會越多,可能影響記憶體的使用,預設值:1048576。

fetch.max.bytes:server端可返回給consumer的最大數據大小,數值可大於max.partition.fetch.bytes,一般設置為預設值即可,預設值:52428800

session.timeout.ms:使用consumer組管理offset時,consumer與broker之間的心跳超時時間,如果consumer消費數據的頻率非常低,建議增大這個參數值,預設值:10000。

auto.offset.reset:消費過程中無法找到數據消費到的offset位置,所選擇的消費策略,earliest:從頭開始消費,可能會消費到重覆數據,latest:從數據末尾開始消費,可能會丟失數據。預設值:earlist。

max.poll.interval.ms:消費者在每一輪poll() (拉取數據之間的最大時間延遲),如果此超時時間期滿之前poll()沒有被再次調用,則消費者被視為失敗,並且分組將觸發rebalance,以便將分區重新分配給別的成員。

如果,再兩次poll之間需要添加過多複雜的,耗時的邏輯,需要延長這個時間,預設值:300s。

max.poll.records:消費者一次poll()操作,能夠獲取的最大數據量,增加這個參數值,會增加一次性拉取數據的數據量,確保拉取數據的時間,至少在max.poll.interval.ms規定的範圍之內,預設值:500。

2.3 Simpleconsumer參數調優

simpleconsumer在初始化階段需要傳一個fetchsize的參數,比如:consumer=new SimpleConsumer(leaderBroker,a_port,100000,64*1024,clientName)中64*1024,該參數表示simpleconsumer一次性獲取的數據大小,如果該值過大則可能會導致request時間過長,使用過程中應該降低這個值,保證消費頻率。

使用SimpleConsumer的核心需求是:多線程消費單個分區,以達到提升性能的要求,如果沒有這樣需求,不建議使用這個這種消費方式

3.消費端頻繁rebalance導致性能下降調優:

3.1因業務處理能力不足導致的:

session.timout.ms控制心跳超時時間。

heartbeat.interval.ms控制心跳發送頻率,建議該值不超過session.timout.ms的三分之一。

max.poll.interval.ms控制每次poll的間隔,時間=獲取數據的時間+處理數據的時間,如果max.poll.records設定的值在max.poll.interval.ms指定的時間內沒有處理完成會觸發rebalance,這裡給出一個相對較為合理的配置,建議在預計的處理時間的基礎上再加1分鐘。

max.poll.records 每個批次處理的數據條數,預設為500條。如果處理能力較低,建議可以減小這個值。

3.2 非正常消費者頻繁的訪問kafka集群導致頻繁rebalance:

收集kafka-request.log,查看異常的topic有哪些客戶端節點在消費,cat kafka-request.* | grep “topic=topicName” | grep “apikey=FETCH” | awk –F’from connection’ ‘{print $2}’ | awk –F’;’ ‘{print $1}’ | awk –F’-’ ‘{print $2}’ | awk –F’:’ ‘{print $1}’ | sort | uniq –c | sort -nr ,找出不應該產生消費行為的節點,停止異常節點上消費者

4.版本引發性能下降優化

FI 8.0.2版本之前kafka SimpleAclAuthorizer鑒權異常導致性能下降,8.0.2版本在使用非安全埠(21005或者9092埠)時會出現集群性能下降的問題,表現:kafka-root.log中出現大量ExitcodeException:id:Default#Principal:no such user報錯。

解決辦法:升級到FI 8023以上版本。

臨時規避辦法:業務側使用21007埠訪問kafka,去掉鑒權插件即allow.everyone.if.no.acl.found=true,將以下kafka服務端配置置為空:authorizer.class.name=。

5.FI 6513~6516版本的內核問題引發的性能異常

6513版本在kafka引入社區的的lazy index功能後,在新的segment創建的過程中可能會導致併發創建失敗的問題,常見的報錯(server.log中)如以下兩種類型:

(1)java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code;

(2)java.lang.IllegalArgumentException: requirement failed: Attempt to append to a full index;

當出現以上兩種類型的報錯的時候可以斷定是版本問題導致,問題預警如:https://support.huawei.com/enterprise/zh/bulletins-product/ENEWS2000007844;
解決方案:升級到6517版本以上版本或者打入緊急補丁:https://support.huawei.com/enterprise/zh/cloud-computing/fusioninsight-hd-pid-21110924/software/251482609?idAbsPath=fixnode01%7C7919749%7C7941815%7C19942925%7C250430185%7C21110924;

臨時規避方案:重啟異常的broker實例。

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • forklift Mac版是一款強大的文件管理程式,彌補了Finder文件管理比較單一的功能,強大到能遠程連接Ftp,SFTP,Amazon S3,WebDAV,SMB,NIS,AFP等網路共用服務協議。相對其他文件管理器如Path Finder,forklift mac更加小巧快速。 除此之外Fo ...
  • PowerPoint 無法打開文件 出現的問題 今天下載老師放在學習通的ppt,居然不能打開,記錄一下 點擊修複後出現: 這並不是文件損壞了,而是powerpoint出於安全的考慮,為了保護我們的電腦,不能打開其他電腦的文件。 解決辦法 右鍵選擇屬性,進入常規界面,勾選解除鎖定,點擊引用,點擊確 ...
  • 個人超級電腦是一個新概念,目前這個市場類似上世紀70年的PC革命時代。本篇是回答一位用戶提問,LAXCUS分散式操作系統如何成為一臺“個人超級電腦”。 ...
  • mysql二進位安裝腳本部署 單實例 [[email protected] ~]# mkdir mysql //創建存放腳本目錄 [[email protected] ~]# ls anaconda-ks.cfg mysql [[email protected] ~]# cd mysql/ [[email protected] ...
  • 1.shell命令的執行機制:fork+exec執行命令(任何的shell都會執行) 2.shell中的用戶輸入處理 1 命令行參數:選項、參數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從文件中讀取 3.shell的 ...
  • 如果現在的我們離開了互聯網,生活會是什麼樣子? 互聯網++++,已經深刻滲透到人們的生活中。 不知道大家有沒有想過?每一個互聯網+結合的背後都是海量的存儲需求。你查看的每一個商品、組建的每一個戰隊、閱讀的每一篇文章,基於互聯網的每一個興趣愛好,都有它的key和value。 在 key-value 數 ...
  • 前言 在正式落地談技術之前,先花一些篇幅說說大數據技術的發展史。我們常說的大數據技術,其實起源於Google在2004年前後發表的三篇論文,分別是分散式文件系統GFS、大數據分散式計算框架MapReduce和NoSQL資料庫系統BigTable(如果大家需要可以留言給我,我可以專門解讀一下)。 一、 ...
  • 2022-09-21 (2)hash操作: ①設置多個hash值,(hmset): 查看說明: help hmset hmset person name A age 1 ②獲得多個hash值,(hmget): 查看說明: help hmget hmget person name age ③將hash ...
一周排行
    -Advertisement-
    Play Games
  • Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 視頻教學 介紹 MiniWord .NET Word模板引擎,藉由Word模板和數據簡單、快速生成文件。 Getting Started 安裝 nuget link : https:// ...
  • Array.Sort Array類中相當實用的我認為是Sort方法,相比起冗長的冒泡排序,它的出現讓排序更加的簡化 結果如下: 還可以聲明一個靜態方法用來專門調用指定數組排序,從名為 array 的一維數組中 a 索引處開始,到 b 元素 從小到大排序。 註意: a + b 不能大於 array 的 ...
  • 前言 在上一篇文章CLR類型系統概述里提到,當運行時掛起時, 垃圾回收會執行堆棧遍歷器(stack walker)去拿到堆棧上值類型的大小和堆棧根。這裡我們來翻譯BotR里一篇專門介紹Stackwalking的文章,希望能加深理解。 順便說一句,StackWalker在中文里似乎還沒有統一的翻譯,J ...
  • 使用過 nginx 的小伙伴應該都知道,這個中間件是可以設置跨域的,作為今天的主角,同樣的 反向代理中間件的 YARP 毫無意外也支持了跨域請求設置。 有些小伙伴可能會問了,怎樣才算是跨域呢? 在 HTML 中,一些標簽,例如 img、a 等,還有我們非常熟悉的 Ajax,都是可以指向非本站的資源的 ...
  • 什麼是Git Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。 Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的 ...
  • 首先CR3是什麼,CR3是一個寄存器,該寄存器內保存有頁目錄表物理地址(PDBR地址),其實CR3內部存放的就是頁目錄表的記憶體基地址,運用CR3切換可實現對特定進程記憶體地址的強制讀寫操作,此類讀寫屬於有痕讀寫,多數驅動保護都會將這個地址改為無效,此時CR3讀寫就失效了,當然如果能找到CR3的正確地址... ...
  • 說明 onlyoffice為一款開源的office線上編輯組件,提供word/excel/ppt編輯保存操作 以下操作均基於centos8系統,officeonly鏡像版本7.1.2.23 鏡像下載地址:https://yunpan.360.cn/surl_y87CKKcPdY4 (提取碼:1f92 ...
  • 二叉樹查找指定的節點 前序查找的思路 1.先判斷當前節點的no是否等於要查找的 2.如果是相等,則返回當前節點 3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找 4.如果左遞歸前序查找,找到節點,則返回,否繼續判斷,當前的節點的右子節點是否為空,如果不為空,則繼續向右遞歸前 ...
  • ##Invalid bound statement (not found)出現原因和解決方法 ###前言: 想必各位小伙伴在碼路上經常會碰到奇奇怪怪的事情,比如出現Invalid bound statement (not found),那今天我就來分析以下出現此問題的原因。 其實出現這個問題實質就是 ...
  • ###一、背景知識 爬蟲的本質就是一個socket客戶端與服務端的通信過程,如果我們有多個url待爬取,只用一個線程且採用串列的方式執行,那隻能等待爬取一個結束後才能繼續下一個,效率會非常低。 需要強調的是:對於單線程下串列N個任務,並不完全等同於低效,如果這N個任務都是純計算的任務,那麼該線程對c ...