首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
JavaEdge
华为_2012实验室_Java工程师
关注
已关注
取消关注
欢迎评论区提问交流~
@JavaEdge:
图解Kafka Producer常用性能优化配置
1 基本参数bootstrap.servers:Kafka broker服务器地址列表,,分开,可不必写全,Kafka内部有自动感知Kafka broker的机制client.dns.lookup:客户端寻找bootstrap地址的方式,支持两种方式:resolve_canonical_bootstrap_servers_only:依据bootstrap.servers提供的主机名(hostname),根据主机上的名称服务返回其IP地址的数组(InetAddress.getAllByName),然后依次获取inetAddress.getCanonicalHostName(),再建立tcp连接。一个主机可配置多个网卡,如果启用该功能,应该可以有效利用多网卡的优势,降低Broker的网络端负载压力。use_all_dns_ips:直接使用bootstrap.servers中提供的hostname、port创建tcp连接,默认选项。compression.type:消息压缩算法,可选值:none、gzip、snappy、lz4、zstd,默认不压缩,建议与Kafka服务器配置的一样,当然Kafka服务端可配置的压缩类型为 producer,即采用与发送方配置的压缩类型。发送方与Broker 服务器采用相同的压缩类型,可有效避免在Broker服务端进行消息的压缩与解压缩,大大降低Broker的CPU使用压力。client.id:客户端ID,如果不设置默认为producer-递增,强烈建议设置该值,尽量包含ip,port,pidsend.buffer.bytes:网络通道(TCP)的发送缓存区大小,默认128Kreceive.buffer.bytes:网络通道(TCP)的接收缓存区大小,默认32Kreconnect.backoff.ms:重新建立链接的等待时长,默认50ms,属于底层网络参数,基本不关注reconnect.backoff.max.ms:重建链接的最大等待时长,默认1s,连续两次对同一个连接建立重连,等待时间会在reconnect.backoff.ms的初始值上成指数级递增,但超过max后,将不再指数级递增key.serializer:消息key的序列化策略,org.apache.kafka.common.serialization接口实现类,注意别导错包了value.serializer:消息体序列化策略partitioner.class:消息发送队列负载算法,默认 DefaultPartitioner,路由算法如下:如指定 key ,则使用 key 的 hashcode 与分区数取模如未指定 key,则轮询所有分区interceptor.classes:拦截器列表,kafka运行在消息真正发送到broker之前对消息进行拦截加工enable.idempotence:是否开启发送端的幂等,默认falsetransaction.timeout.ms:事务协调器等待客户端的事务状态反馈的最大超时时间,默认60stransactional.id:事务id,用于在一个事务中唯一标识一个客户端2 性能优化常配参数涉及到消息发送是如何工作的,本节首先将罗列参数,做简单说明,然后再给出运作图,进一步阐述其工作机制。buffer.memory用于设置一个生产者(KafkaProducer)中缓存池的内存大小,默认为32M。max.block.ms当消息发送者申请空闲内存时,如果可用内存不足的等待时长,默认为60s,如果在指定时间内未申请到内存,消息发送端会直接报TimeoutException,这个时间包含了发送端用于查找元信息的时间。retries重试次数,Kafka Sender线程从缓存区尝试发送到Broker端的重试次数,默认为Integer.MAX_VALUE,为了避免无限重试,只针对可恢复的异常,例如Leader选举中这种异常就是可恢复的,重试最终是能解决问题的。acks用来定义消息“已提交”的条件(标准),就是 Broker 端向客户端承偌已提交的条件,可选值如下:0表示生产者不关心该条消息在 broker 端的处理结果,只要调用 KafkaProducer 的 send 方法返回后即认为成功,显然这种方式是最不安全的,因为 Broker 端可能压根都没有收到该条消息或存储失败。all 或 -1表示消息不仅需要 Leader 节点已存储该消息,并且要求其副本(准确的来说是 ISR 中的节点)全部存储才认为已提交,才向客户端返回提交成功。这是最严格的持久化保障,当然性能也最低。1表示消息只需要写入 Leader 节点后就可以向客户端返回提交成功。batch.size在消息发送端Kafka引入了批的概念,发送到服务端的消息通常不是一条一条发送,而是一批一批发送,该值用于设置每一个批次的内存大小,一个批次对应源码层级为ProducerBatch对象,默认为16K。linger.ms该参数与batch.size配合使用。Kafka希望一个批次一个批次去发送到Broker,应用程序往KafkaProducer中发送一条消息,首先会进入到内部缓冲区,具体是会进入到某一个批次中(ProducerBatch),等待该批次堆满后一次发送到Broker,这样能提高消息的吞吐量,但其消息发送的延迟也会相应提高,试想一下,如果在某一个时间端,应用端发送到broker的消息太少,不足以填满一个批次,那岂不是消息一直无法发送到Broker端吗?为了解决该问题,linger.ms参数应运而生。它的作用是控制在缓存区中未积满时来控制消息发送线程的行为。如果linger.ms 设置为 0表示立即发送,如果设置为大于0,则消息发送线程会等待这个值后才会向broker发送。有点类似于 TCP 领域的 Nagle 算法。delivery.timeout.ms消息在客户端缓存中的过期时间,在Kafka的消息发送模型中,消息先进入到消息发送端的双端缓存队列中,然后单独一个线程将缓存区中的消息发送到Broker,该参数控制在双端队列中的过期时间,默认为120s,从进入双端队列开始计时,超过该值后会返回超时异常(TimeoutException)。request.timeout.ms请求的超时时间,主要是Kafka消息发送线程(Sender)与Broker端的网络通讯的请求超时时间。max.request.sizeSend线程一次发送的最大字节数量,也就是Send线程向服务端一次消息发送请求的最大传输数据,默认为1M。max.in.flight.requests.per.connection设置每一个客户端与服务端连接,在应用层一个通道的积压消息数量,默认为5,有点类似Netty用高低水位线控制发送缓冲区中积压的多少,避免内存溢出。4 图解参数的作用时机到底如何指导实际业务的性能优化参数,该调哪些参数?咱们下篇文章再叙。文章转载自公众号:【JavaEdge】参考:编程严选网
点赞 0
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
今天 10:40
门头沟学院 测试开发
12.30丰疆智能测试面经(base武汉)
1.自我介绍2.公司在深圳还是哪里?3.为什么只实习两个月?4.购物车的测试用例是如何设计的?5.有使用自动化框架吗?你在其中如何参与自动化的工作?6.公司项目执行的自动化具体的结构是怎么样的?7.整个工作流程怎么样的,除了测试有没有其他参与的地方?8.Postman与Jmeter在接口测试#牛客AI配图神器#这方面有什么区别?9.解释一下等价类与边界值两个方法10.web测试与app测试的区别11.反复拷打实习细节内容12.反问
牛客在线求职答疑中心
点赞
评论
收藏
分享
01-21 15:37
已编辑
华为_2012实验室_Java工程师
Only AI Flow Can Do!
作为骨灰级程序员,咋用 AI flow 提高编码效率 零代码基础,如何使用 AI 辅助编程工具实现自己的想法 盘点常用的 AI 辅助编程工具和使用场景 如何选择适合自己的 AI 辅助编程工具 如今的 AI flow 系列软件包括:Cursor、Bolt、v0...... 1 编码咋提效? AI flow已和我日常工作学习和创作无缝融合,使用 AI flow 写代码,体验非常流畅,编程效率大大提升。 1.1 代码补全 Tab一下,代码自动补全,各厂家有训练自己的智能补全模型,在项目工程感知上下文,给出智能代码补全建议。苦了那些只能在云桌面开发的同学,毕竟私有部署太昂贵! 以前可以叫我 cv 侠...
AI coding的好用...
点赞
评论
收藏
分享
2025-12-12 19:01
南京航空航天大学 C++
装个大的,把 WXG 拒了
投票
秋招没咋投,准备 wxg 转正之后摆烂了。结果不堪字节 HR 的骚扰还是面了一下字节。之前想去字节的时候怎么面都挂。现在想着随便面一下结果三面技术面都意外顺利还有加面。十月中旬字节发了意向,wxg 转正结果无响应。十月底字节拉了保温群,wxg 口头通过,系统显示考核中。十一月初和字节 ld 交流之后得知 base 居然能选海外,甚至能小 wlb 一下,wxg 无响应无人联系。十一月中旬把字节 base 转到了海外,wxg 流程灰了,一问超时忘处理了,过两天又变考核中了。十一月下旬字节换了海外 HR 对接,问了期望薪资,wxg 考核终于显示通过,无 HR 保温,无其他保温。十一月底给字节报了个天价,想吓吓他们,同时告诉微信字节要开了,微信无响应。同样十一月底字节 HR 告诉我确实给不到那么高,但是能拿期权补上,问能不能接受。微信无响应。同样十一月底字节 HR 告知了具体方案,符合预期。 微信无响应。十二月上旬催 wxg 不开我就盲拒了,wxg HR 火急火燎的打电话问情况,问期望。我给了一个不算夸张的总包数字,因为今年市场在涨,过了三天还不联系我,我再催,约时间下午打电话,非得在我给出的数字上压下去几万,微信又不差这点,为什么不能满足我,让我没有拒绝的理由呢?一番纠结抗争,求稳还是追求挑战,最终选择接受迎接新的挑战,因为堂吉诃德永远不会停下脚步!回想起来,在 wxg 谈薪的阶段,我认为并没有给予我一定的重视,即使 HR 表示我在实习期间的表现和之前的面评都很靠前。也没有感觉到想要争取我,虽然我表示拒了 offer 之后要给我加面委定 t6 再涨,但我三个月没面试让我面面委那就是白给,还是算了。有缘再见了我亲爱的 wxg,再见了曾经的梦中情厂,再见亲爱的 mt,再见亲爱的朋友们。也再见,北京的一切。我想润了。秋招结束,卸载牛客,下一个三年,下一个五年,下一个十年后再来看看。
面试中的大熊猫爱吃薯...:
我嫉妒得狗眼通红
点赞
评论
收藏
分享
01-23 22:07
已编辑
University of Edinburgh 嵌入式软件工程师
嵌入式实习offer选择
笔者今天收到两个offer,请求大家帮忙选一下,bg本2硕,主要学习了C语言和STM32,freertos,先找的联芸杭州的嵌入式开发,是做存储芯片功能测试的,驱动测试,后来海康有个前端业务摄像头的测试工程师,本人技术水平不太高,应该去哪个?
offer帮选
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习产出如何包装?
9328
2
...
32岁程序员猝死,底薪3千要24h待岗
2904
3
...
【官方活动】牛客新春计划:给陌生人的一封信
2636
4
...
实习生怎么快速融入团队
2368
5
...
后端从0开始来得及吗
1399
6
...
27届实习全时间全方位大体指南
1350
7
...
20多岁最痛苦的年纪
1277
8
...
绷不住了,找了一个月实习嵌入式还找不到
1231
9
...
25届工作半年,想辞职了
1131
10
...
在咖啡店、家里、公司走廊哪里都可以来一场面试
1061
创作者周榜
更多
正在热议
更多
#
哪些公司开春招了?
#
12059次浏览
123人参与
#
牛客十周岁生日快乐
#
206433次浏览
1923人参与
#
上班以后,你还有哪些坚持的爱好?
#
8121次浏览
188人参与
#
你觉得什么岗位会被AI替代
#
34789次浏览
231人参与
#
你最近因为什么迷茫?
#
36499次浏览
589人参与
#
四大天坑是哪四家?
#
101315次浏览
235人参与
#
如果工作一直消耗情绪还要继续做吗
#
18050次浏览
82人参与
#
一人一个landing小技巧
#
142986次浏览
1497人参与
#
互联网公司评价
#
479522次浏览
4090人参与
#
我和mentor的爱恨情仇
#
101572次浏览
919人参与
#
聊聊你的被动加班经历
#
3891次浏览
73人参与
#
找工作以来,你最看不惯__
#
16772次浏览
338人参与
#
工作压力大怎么缓解
#
138594次浏览
1253人参与
#
AI coding的好用工具分享
#
20645次浏览
401人参与
#
实习离职怎么跟领导说
#
76103次浏览
432人参与
#
实习教会我的事
#
52014次浏览
409人参与
#
实习怎么做才有更好的产出
#
13449次浏览
244人参与
#
百度工作体验
#
302382次浏览
2219人参与
#
百度求职进展汇总
#
654006次浏览
6275人参与
#
你今年的保底offer是哪家
#
164539次浏览
701人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务