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

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

如何选择压缩算法?

选择压缩算法主要考虑压缩比和压缩速率

  • 压缩比是为了节省网络宽带和磁盘存储空间
  • 压缩速率影响吞吐量
  • 压缩比越高,压缩速率越低。压缩比越低,压缩速率越高

选择压缩算法需要结合实际场景判断,要以性能测试为准,不能仅依赖原理分析

操作系统交换区

操作系统交换区就是swap分区,物理内存不足时,会把物理内存一部分页淘汰放在磁盘上,就是放到swap分区

触发这种交换性能会显著下降。交换越多,下降越快

优化措施

优化生产者

优化生产者可以从三个方面考虑:优化acks、优化批次、启用压缩

优化acks
  • 如果追求性能,就应该把acks设置为0

    • 如果我们的业务没有严格的消息不丢的要求,完全可以设置为0,可以极大限度的提高性能
  • acks也可以设置为1,但是性能比0差一点

优化批次

优化批次对生产者来说发送消息的速率更快

优化批次对kafka来说,同样数量的消息,批次越大,性能越好

  • 当发送者遇到瓶颈后,可以尝试调大批次的参数来提高发送性能。和批次有关的参数有两个

    • linger.ms:凑够一个批次的最大等待时间
    • batch.size:一个批次最大多少字节
  • 在broker的阈值内,调整这两个参数可以提高发送性能

  • 批次也不是越大越好

    • 批次太大,生产者丢失数据的可能就大
    • 批次大小到了一个地步后,性能瓶颈就成了broker处理能力,再调大批次也没用
  • 最好的策略还是通过压测来确定批次大小
  • 发送者阻塞也可能是缓冲池太小,要调大缓冲池

发送者阻塞要仔细分析,如果是发送速率的问题,调大发送缓冲区治标不治本。如果发送速率没问题,确实是缓冲池太小,就可以调大缓冲池。实践中,其实很难区别两种情况,可以考虑先调大批次,再调整缓冲池

启用压缩

kafka默认不启用压缩,如果开启压缩提高吞吐量,优化措施很简单

  • 为了进一步提高kafka吞吐量,我开启了kafka压缩功能,使用了LZ4压缩算法

经过测试LZ4吞吐量最好

优化broker

优化broker可以从五个方面考虑:优化swap、网络读写缓冲区、磁盘IO、主从同步、JVM

优化swap
  • kafka非常依赖内存,可以尽量调小参数来优化内存
  • 为什么不直接禁用swap?

    • 以防万一。物理内存有限,直接禁用可能遇到内存不足。
优化网络读写缓冲区
  • kafka是网络IO频繁的应用,调整网络有关的读写缓冲区,也能优化性能

    • 尽量调大读写缓冲区,可以根据broker的硬件资源来确定
优化磁盘IO
  • kafka是磁盘IO密集的应用。可以从两个方向优化磁盘IO

    • 使用XFS作为文件系统,XFS比EXT4更适合kafka,XFS性能更好,kafka使用XFS比EXT4性能高5%左右
    • 禁用atime,atime是文件最后访问时间,kafka用不上
优化主从同步
  • 主从同步的优化其实就是参数都调大

    • 调整分区同步数据线程数量,加快同步速率,但是会给主分区和网络带宽带来压力
    • 调整同步批次最小最大字节数,越大吞吐量越高,尽量都调大
    • 调整分区等待时间,在一批次中同步尽可能多的数据
  • 调大一定地步后,瓶颈可能成了分区来不及处理,所以也是在一定限度下调大

优化JVM
  • kafka运行在Java上,理论上说优化Java性能的措施也可以优化kafka,但是我不会Java,所以不多做赘述,可以自己查询JVM的优化,比如优化GC
相关推荐
coderSong25683 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy4 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
咖啡啡不加糖5 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
大鸡腿同学5 小时前
纳瓦尔宝典
后端
2302_809798327 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
zhojiew7 小时前
关于akka官方quickstart示例程序(scala)的记录
后端·scala
sclibingqing7 小时前
SpringBoot项目接口集中测试方法及实现
java·spring boot·后端
JohnYan9 小时前
Bun技术评估 - 03 HTTP Server
javascript·后端·bun
周末程序猿9 小时前
Linux高性能网络编程十谈|C++11实现22种高并发模型
后端·面试