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
相关推荐
方圆想当图灵9 分钟前
关于 Nacos 在 war 包部署应用关闭部分资源未释放的原因分析
后端
Lemon程序馆19 分钟前
今天聊聊 Mysql 的那些“锁”事!
后端·mysql
龙卷风040522 分钟前
使用本地IDEA连接服务器远程构建部署Docker服务
后端·docker
vv安的浅唱26 分钟前
Golang基础笔记七之指针,值类型和引用类型
后端·go
陪我一起学编程37 分钟前
MySQL创建普通用户并为其分配相关权限的操作步骤
开发语言·数据库·后端·mysql·oracle
Heo1 小时前
调用通义千问大模型实现流式对话
前端·javascript·后端
Java水解2 小时前
RabbitMQ用法的6种核心模式全面解析
后端·rabbitmq
用户4099322502122 小时前
FastAPI的查询白名单和安全沙箱机制如何确保你的API坚不可摧?
前端·后端·github