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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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性…