kafka吞吐量提升總結

前言

原本自以為閱讀了很久kafka的源碼,對于kafka的了解已經深入到一定程度了,后面在某大廠的面試中,面試官詢問我,如果需要提升kafka的性能,應該怎么做,我發現我能答上來的點非常的少,也暴露了我在學習時候缺少總結,導致要用的時候很難一次性快速表達出來,也讓我錯過了一個大廠的offer,盡管我在面試之后迅速做了相關問題總結,而且已經過去了半年,但是我還是會時不時想起這件事,所以想專門寫一篇kafka性能提升的總結文章來超度那件事,讓它不要再糾纏與我了,

一 生產者

1.1 配置優化

1 增加每個分區的消息批的大小( batch.size: 16k),適當增加批的最大緩存時間( linger.ms)讓生產者累積器中的每個Sender可以累積更多的消息再發送,減少網絡請求次數,同時也能增加broker硬盤IO的存儲效率(每次順序寫入的多)

2 增加生產者中累積器的內存緩沖區(buffer.memory: 32M)大小,當累積器的緩沖區用完時,也會吧消息發送給broker,通過增加增加生產者中累積器,也可以減少網絡請求次數

4 壓縮消息(compression.type:none-默認不壓縮),可以選擇 gzip、snappy、lz4、zstd 等。減少網絡傳輸的數據量,但是會增加cpu負擔,可以在網絡流量和cpu之間找到一個平衡點

5 在必要條件時,可以吧ack設置為0,但是會使得丟消息的概率提高

1.2 代碼優化

1 多線程生產,多個線程使用多個生產者并行生產消息

2 異步生產,生產者發送消息本身涉及網絡IO,而且除了異常處理外我們不太需要關注返回結果,所以可以通過線程池等異步生產消息,避免堵塞主線程,提升系統整體性能

3 批量生產和壓縮:盡管kafka生產者本身已經通過批量生產做了性能優化,但是這個并不妨礙我們在必要的時候自行積累數據批量發送(甚至手動壓縮)來減少網絡IO,提升整體吞吐量,畢竟kafka的批量生產和壓縮都是通用的算法,有時候我們可能根據業務數據的特點使用更加高效的批量生產和壓縮

二 消費者

2.1 配置優化

1 調整每次拉取消息的量(fetch.min.bytes和fetch.max.bytes)減少網絡IO

2.2 代碼優化

1 并行處理,消費者內部使用多線程處理消息。

2.3 部署優化

1 通過分區和消費者的關系,可以知道如果分區數和消費者數相同時候,可以充分利用并行處理能力

三 broker

3.1 配置優化

1 節點配置的優化,比如IO線程數(handler的數量:num.io.threads),網絡線程數(Processor的數量:num.network.threads),還有套接字緩沖區的大小(socket.send.buffer.bytes/socket.receive.buffer.bytes)

3 對kafka的jvm進行調優,比如內存和 GC方面優化

5 優化分區副本的放置,確保高可用的同時,避免跨數據中心的復制延遲

3.2 部署優化

1 適當增加topic的分區數,充分運用到多個broker資源和broker內部的并行處理能力,但需注意過多的分區可能導致的問題。

2 使用固態硬盤等增加硬盤性能,優化文件存儲目錄的布局以減少 I/O 競爭,如果有多個硬盤,盡量讓日志文件分布在多個硬盤上

3?采用 LogDir 多個目錄分散寫入負載。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906633.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙 HarmonyOS NEXT 系統 Preference 首選項使用全解析

鴻蒙HarmonyOS系統Preference首選項使用全解析 大家好,我是威哥。在鴻蒙應用開發里,用戶偏好設置的管理是極為重要的一環。HarmonyOS為我們提供了Preference組件,它能讓我們輕松實現應用設置界面,對用戶首選項進行高效管理。接下…

xdc約束學習

對clk的約束 //約束clk為 125M Hz create_clock -period 8.000 -name gt_refclk1_p -waveform {0.000 4.000} [get_ports gt_refclk1_p] 偽時鐘路徑,用于兩個時鐘域之間數據的交互 單邊性(unateness)對于時序很重要,因為它指定的…

在 Ubuntu 虛擬機中實現 HTML 表單與 C 語言 HTTP 服務器交互

一、環境說明 系統:Ubuntu 虛擬機(已安裝基本開發工具,如 GCC)目標:通過 C 語言服務器托管 HTML 表單頁面,并實現數據提交交互 二、核心文件準備 1. 創建 HTML 表單頁面(xunfei.html&#xf…

LVS 負載均衡集群應用實戰

前提:三臺虛擬機,有nginx,要做負載 1. LVS-server 安裝lvs管理軟件 [root@lvs-server ~]# yum -y install ipvsadm 程序包:ipvsadm(LVS管理工具) 主程序:/usr/sbin/ipvsadm 規則保存工具:/usr/sbin/ipvsadm-save > /path/to/file 配置文件:/etc/sysconfig/ipvsad…

鴻蒙進階——Framework之Want 隱式匹配機制概述

文章大綱 引言一、Want概述二、Want的類型1、顯式Want2、隱式Want3、隱式Want的匹配 三、隱式啟動Want 源碼概述1、有且僅有一個Ability匹配2、有多個Ability 匹配需要彈出選擇對話框3、ImplicitStartProcessor::ImplicitStartAbility3.1、GenerateAbilityRequestByAction3.1.1…

Rules and Monetization

The system creates rules that allow them to monetize. The system doesn’t just enforce rules — it creates them strategically to monetize control. 🔧 How It Works: Invent a rule (e.g., “You need a permit to sell food.”)Claim it’s for safety …

java中string類型的list集合放到redis的5種數據類型的那種比較合適呢,可以用StringRedisTemplate實現

在Java中,如何將一個String類型的List集合存儲到Redis中,并且應該選擇Redis的哪種數據類型。同時,用戶還問到是否可以使用StringRedisTemplate來實現。 首先,我需要回憶一下Redis的5種主要數據類型:字符串(…

基于DQN的學習資源難度匹配智能體

基于DQN的學習資源難度匹配智能體 下面我將實現一個基于DQN(深度Q網絡)的智能體,用于根據用戶的學習表現動態匹配適合難度的學習資源。這個系統可以應用于在線教育平臺,根據用戶的歷史表現自動調整推薦資源的難度級別。 1. 環境設置 首先我們需要定義學習環境,這里我創建…

OrangePi Zero2開發指南:從SDK獲取到交叉編譯全流程詳解

一、OrangePi Zero2 SDK說明 SDK 全稱 Software Development Kit,即軟件開發工具包。一般包括了一些工具(如交叉編譯工具鏈)、庫、文檔和示例代碼。香橙派的Linux SDK其實指的就是 orangepi-build 這套代碼集,orangepibuild 在腳…

MATLAB NLP 工具箱 文本預處理教程

文章目錄 前言一、文本預處理核心步驟二、MATLAB 實現示例三、高級預處理技術四、預處理流程整合五、性能優化與注意事項六、實戰案例:IMDB 影評預處理 前言 以下是 MATLAB 自然語言處理 (NLP) 工具箱的文本預處理教程,涵蓋核心步驟、代碼實現及最佳實踐…

大模型的量化與雙重量化(1)

文章目錄 大模型量化的含義和作用什么是量化量化的作用具體示例 雙重量化的含義和作用什么是雙重量化雙重量化的具體實現雙重量化的作用具體示例對比實際應用場景 大模型量化的含義和作用 什么是量化 量化是指將神經網絡中的參數(權重和激活值)從高精度…

ES6 新增 API 方法

ES6 新增 API 方法 目錄 ES6 新增 API 方法背景介紹數組方法1. Array.from()2. Array.of()3. find/findIndex4. includes5. flat/flatMap 對象方法1. Object.assign()2. Object.keys/values/entries3. Object.getOwnPropertyDescriptors() 字符串方法1. includes/startsWith/en…

vscode使用ssh鏈接服務器

vscode SSH vscode先下載remote ssh的插件,隨后在左邊的菜單欄里選擇遠程。 點擊新建連接,輸入用戶名和地址,-p參數指定端口 ssh ubuntu{ip} -p xxx 隨后就可以正常連接了,這里使用普通用戶的用戶名密碼,別用root。 配…

基于FPGA的電子萬年歷系統開發,包含各模塊testbench

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 5.完整工程文件 1.課題概述 基于FPGA的電子萬年歷系統開發,包含各模塊testbench。主要包含以下核心模塊: 時鐘控制模塊:提供系統基準時鐘和計時功能。 日歷計算模塊&#xff1a…

C++ 的 out_ptr 和 inout_ptr

1 問題的起因 1.1 T** 或 T&* ? C 的智能指針可以通過 get() 和 * 的重載得到原始指針 T*&#xff0c;遇到這樣的 C 風格的函數的時候&#xff1a; void Process(Foo *ptr);std::unique_ptr<Foo> sp ...;Process(sp.get()); //調用 Process 函數Process() 函數以…

取消 Conda 默認進入 Base 環境

在安裝 Conda 后&#xff0c;每次打開終端時默認會進入 base 環境。可以通過以下方法取消這一默認設置。 方法一&#xff1a;使用命令行修改配置 在終端中輸入以下命令&#xff0c;將 auto_activate_base 參數設置為 false&#xff1a; conda config --set auto_activate_ba…

數字計數--數位dp

1.不考慮前導零 2.每一位計數&#xff0c;就是有點“數頁碼”的意思 P2602 [ZJOI2010] 數字計數 - 洛谷 相關題目&#xff1a;記得加上前導零 數頁碼--數位dp-CSDN博客 https://blog.csdn.net/2301_80422662/article/details/148160086?spm1011.2124.3001.6209 #include…

Redis學習打卡-Day5-Redis 持久化

單點 Redis 的一些問題 數據丟失&#xff1a;Redis 是內存存儲&#xff0c;服務重啟可能會丟失數據。solution&#xff1a;實現 Redis 數據持久化。并發能力&#xff1a;單節點 Redis 并發能力雖然不錯&#xff0c;但也無法滿足如618這樣的高并發場景。solution&#xff1a;搭…

飛書知識問答深度體驗:企業AI應用落地的典范產品

飛書知識問答深度體驗&#xff1a;企業AI應用落地的典范產品 產品介紹-飛書知識問答是什么與常規通用大模型相比有何優點&#xff1f;大模型橫行的時代&#xff0c;飛書知識問答對普通人和企業有何影響呢&#xff1f; 場景示例-不同角色可以用飛書知識問答做什么&#xff1f;對…

Python打卡訓練營學習記錄Day34

知識點回歸&#xff1a; CPU性能的查看&#xff1a;看架構代際、核心數、線程數 GPU性能的查看&#xff1a;看顯存、看級別、看架構代際 GPU訓練的方法&#xff1a;數據和模型移動到GPU device上 類的call方法&#xff1a;為什么定義前向傳播時可以直接寫作self.fc1(x) CPU性…