后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

30|Kafka 综合运用:怎么在实践中保证 Kafka 高性能?

你好,我是大明。今天我们来聊 Kafka 的最后一个话题——怎么在实践中保证 Kafka 高性能?也可以说,怎么在业务里面优化使用 Kafka 的性能。
在前面微服务部分,我就说高并发可遇不可求,而高可用和高性能是可求的。在追求高性能的时候,Kafka 自然也是一个绕不开的环节。那么今天这节课我就带你深入讨论怎么优化发送者和 broker,结合消息积压中优化消费者性能的知识,你就掌握了一条消息从生产出来到消费完成整个环节上优化性能的方法。

如何选择压缩算法?

不管是 Kafka 还是别的中间件,你在选择压缩算法的时候,首先要考虑的就是压缩比和压缩速率。压缩比主要是为了节省网络带宽和磁盘存储空间,而压缩速率主要影响吞吐量。
一般来说,压缩比越高,压缩速率越低;压缩比越低,压缩速率越高。
所以选择压缩算法就是看自己的业务场景究竟是偏向压缩比还是偏向压缩速率。不过在真实环境下,一切都要以性能测试为准,而不能仅仅依赖于原理分析。

操作系统交换区

在现代操作系统中,基本都支持交换区,也叫做 swap 分区。当操作系统发现可用的物理内存不足的时候,就会把物理内存里的一部分页淘汰出来,放到磁盘上,也就是放到 swap 分区。
你也可以把 swap 分区看作是“虚拟内存”。那么你可以想到,如果触发了这种交换,性能就会显著下降。交换越频繁,下降越快。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了如何在实践中保证Kafka高性能的方法。首先介绍了选择压缩算法的考虑因素,包括压缩比和压缩速率的权衡。其次讨论了操作系统交换区对性能的影响,以及在面试准备中需要了解的相关信息。接着提出了面试准备的建议和基本思路,强调将消息队列优化作为整个系统性能优化的一个环节。最后给出了优化措施,包括优化生产者的acks设置和其他优化手段。文章还介绍了优化批次、启用压缩、优化broker、优化主从同步等方面的具体方法。整体而言,本文以实际应用为出发点,深入探讨了Kafka高性能的实践方法,对于需要优化Kafka性能的读者具有一定的参考价值。 文章内容涵盖了Kafka性能优化的多个方面,包括选择压缩算法、操作系统交换区对性能的影响、面试准备建议、优化生产者和broker的措施等。特别强调了在实践中应用这些优化措施的重要性,以及如何将消息队列优化作为整个系统性能优化的一个环节。文章内容丰富,对于需要优化Kafka性能的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • kai
    请问一下老师: 问题1:这几个参数的修改是指修改 linux 系统的参数吗? net.core.rmem_default 和 net.core.wmem_default:Socket 默认读写缓冲区大小。 net.core.rmem_max 和 net.core.wmem_max:Socket 最大读写缓冲区。 net.ipv4.tcp_wmem 和 net.ipv4.tcp_rmem:TCP 读写缓冲区。它们的值由空格分隔的最小值、默认值、最大值组成。可以考虑调整为 4KB、64KB 和 2MB。 问题2: Kafka 客户端 receive.buffer.bytes 也是修改 TCP receive buffer 的值,请问一下这个参数的修改和上述 linux 系统的修改是什么关系呢? 谢谢老师

    作者回复: 1. 是的。 2. 我个人的看法是,优先修改中间件本身的参数,因为影响面最小。receive.buffer.bytes 控制的是 kafka 自己操作 TCP 的缓冲区,所以你也可以一起调整。

    2023-10-18归属地:上海
    1
  • 王韬
    优化主从那里,如果acks设置为all的话,是不是这两部分是不是相反的影响啊?

    作者回复: 所以面试要考虑清楚自己用高可用还是用高性能,这两个有时候是冲突的。用一个就不用另外一个,见人说人话,见鬼说鬼话,看面试官喜欢啥你就回答啥。

    2024-01-30归属地:上海
  • ZhiguoXue_IT
    请教一下, 优化jvm,g1性能好只是因为g1的垃圾回收算法,多cms标记整理吗,还有哪些点呢

    作者回复: 最关键的两个点: - 停顿时间更短,并且更加可控 - G1 更加适合大堆 G1 还有其它的优点,但是我认为这两个优点是它比 CMS 更加适合大内存 JVM 的核心原因

    2023-09-28归属地:北京
  • peter
    请教老师几个问题: Q1:缓冲池太小为什么会阻塞发送者? 文中有这样一句话:“发送者被阻塞也可能是因为缓冲池太小”,缓冲池小,很快就会装满,就可以发送,这样发送速度更快啊。缓冲池大才会阻塞发送者吧。 Q2:atime禁用怎么理解? 不让kafka使用文件的atime属性?还是从操作系统层面上禁止给忘记设置atime属性? Q3:Redis性能和TCP参数有关吗?

    作者回复: 1. 因为要先放到缓冲池,再聚合发送。你都放不下,那自然就是阻塞了 2. 操作系统层面上禁用 3. 基本上用了 TCP 协议都有关。

    2023-08-25归属地:北京
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部