Kafka 多维度调优
优化金字塔
应用程序层面
框架层面(Broker层面)
JVM层面
操作系统层面
应用程序层面:应当优化业务代码合理使用 kafka,合理规划主题,合理规划分区,合理设计数据结构;
框架层面:在不改动源码的情况下,从 kafka 参数配置入手,结合业务体量和运行数据进行调优
JVM 层面:在出现明显缓慢和可能的内存溢出的情况下,结合业务代码情况和服务器能力调优堆内存,非堆内存,GC 方式等参数,非必要不更改过多参数
操作系统层面:在服务器操作系统层面调优尽量减少 kafka 程序运行限制,关注文件描述符限制,Selinux 限制,JDK 版本等情况
操作系统调优
文件系统的选择上,可选择 XFS 和 EXT4,生产环境推荐 XFS,具备高性能和高伸缩性优点,最新的报道显示具备多级缓存的 ZFS 针对高 IO 的 kafka 有不错的效果,但并未大规模验证
Swap 空间参数设置:尽量设置小一点,修改/etc/sysctl.conf 文件,增加 vm.swappiness=,防止 Linux OOM Killer 线程随意杀线程
文件描述符:ulimit -n 不能设置过小,在 topic 数量稍大时就会出现 Too Many File Open 报错情况
控制进程可以拥有的内存映射区域的最大数量:vm.max_map_count,设置过小会出现内存溢出情况
操作系统页缓存:由于 Kafka 存储数据时只要数据到来 Page Cache 页缓存就会返回 Ack 给生产者,并不会直接落盘,还需要等待触发或手动刷盘操作进行持久化刷盘,此时操作系统的 Cached 大小必须超过一个日志段大小,Broker 上对应参数为 log.segment.bytes,越大消费者在消费时有更大概率在缓存页命中,避免频繁 IO 从硬盘读取数据。
JVM 层面调优
框架调优(Broker 层面)
框架调优(Producer 层面)
框架调优(Consumer 层面)
应用程序层面调优
文章转载自:付同學
评论