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层面调优


(1)堆内存参数设置:kafka本身并不占用过多堆内存,6-8G相对合适,在kafka-server-start.sh设置KAFKA_HEAP_OPTS参数即可;更精确可以查看KafkaServer-gc.log,关注Full GC之后堆上存活大小的总量,从而可以将堆内存设置为这个值的2-2.5倍,可以使用图上命令进行手动GC
(2)GC选择器:博主kafka3.5.1版本的kafka集群使用openjdk11.0.X,默认G1收集器;在G1中Full GC是单线程运行,在生产环境中要尽量避免Full GC
(3)JDK选择:至少JDK1.8,推荐JDK11,kafka3.0推荐至少使用JDK11
框架调优(Broker层面)
(1)版本适配:尽量保持客户端版本和Broker端版本一致或尽量适配,以避免版本之间不一致问题导致的性能优化损失,如零拷贝等特性
(2)消息压缩方式:Broker端和Producer段的消息压缩方式应该保持一致,推荐lz4,第二选择gzip,如果设置得不一致会导致Broker付出大量额外的CPU性能用于解压和二次压缩
(3)num.io.thread:Handler线程用于执行业务处理,Acceptor线程用于接收网络请求,Processor线程用于建立网络连接和分发网络请求,Handler线程才是执行业务请求处理的线程,由Broker参数num.io.thread决定,数量越大执行线程越多,处理速度更快
(4)num.recovery.threads.per.data.dir:Broker重启后恢复线程数量,设置越大,追上数据进入ISR越快
(5)num.network.thread:The number of threads that the server uses for receiving requests from the network and sending responses to the network,增加这个线程参数就是提高收发网络请求的速度
(6)log.retention.bytes:日志保存时间,针对业务需求合理设置时间
(7)message.max.bytes:针对消息集合打包的大消息体业务,需要设置更大的参数
(8)num.replica.fetchers:副本数据同步线程,应当不超过cpu核数,通常设置为4-8即可
框架调优(Producer层面)
(1)消息发送确认机制:acks=all,通常情况下在生产环境设置为acks=1即Leader副本确认即可
(2)批量发送消息大小:batch.size= 发送到同一个分区消息的批次大小限制
(3)发送最大时延:linger.ms=,批量大小没有达到batch.size,最大允许时延
框架调优(Consumer层面)
(1)消息提交机制:如为保证消息不重复消费即手动提交消息
(2)消息数据批量大小:fetch.min.bytes,如果时延不敏感追求吞吐量,可设置得大一点
应用程序层面调优
(1)保证业务代码健壮性,保证容器不会出现过多bug导致反复重启诱发Kafka集群Rebalance
(2)不要频繁创建Producer和Consumer,建立的连接要Close;
(3)合理创建线程池进行连接复用
(4)合理利用多线程进行推送,消费消息
Kafka多维度调优的更多相关文章
- DataPipeline |ApacheKafka实战作者胡夕:Apache Kafka监控与调优
https://baijiahao.baidu.com/s?id=1610644333184173190&wfr=spider&for=pc DataPipeline |ApacheK ...
- Kafka的参数调优
这篇文章主要说一下在生产过程中的kafka常用的调优参数, 首先kafka的版本是0.9.0.1,针对以下几个方面来说, 针对kafka的堆内存: 针对kafka的集群调优: kafka的的消息机制有 ...
- DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优
胡夕 <Apache Kafka实战>作者,北航计算机硕士毕业,现任某互金公司计算平台总监,曾就职于IBM.搜狗.微博等公司.国内活跃的Kafka代码贡献者. 前言 虽然目前Apache ...
- Kafka监控与调优
Kafka监控 五个维度来监控Kafka 监控Kafka集群所在的主机 监控Kafka broker JVM的表现 监控Kafka Broker的性能 监控Kafka客户端的性能.这里的所指的是广义的 ...
- Spark踩坑记:Spark Streaming+kafka应用及调优
前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...
- Kafka 集群调优
更多内容,前往 IT-BLOG 单个 kafka服务器足以满足本地开发或 POC要求,使用集群的最大好处是可以跨服务器进行负载均衡,再则就是可以使用复制功能来避免因单点故障造成的数据丢失.在维护 Ka ...
- kafka消费服务调优
1.消费服务速度跟不上 2.top -H 观察是哪个线程最忙 3.多次使用jstack,看看最忙的那个线程在做什么
- 我的 Kafka 旅程 - 性能调优
Producer 于 config/producer.properties 配置文件中的项 # 序列化数据压缩方式 [none/gzip/snappy/lz4/zstd] compression.ty ...
- 《Kafka权威指南》读书笔记-操作系统调优篇
<Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...
- 《Apache Kafka实战》读书笔记-调优Kafka集群
<Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...
随机推荐
- 解决方案|致拓T8数字化ERP
简介:通过快速构建敏捷ERP系统,实现从销售到财务的全流程闭环管理,助力企业数字化升级. 「致拓T8数字化ERP」解决方案聚焦业财一体,助力企业卓有成效地提升经营收益,赋能企业个性化数字生产管理.本 ...
- Fluid — 云原生环境下的高效“数据物流系统”
简介: 为了解决大数据.AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高.联合分析难.多维管理杂等痛点问题,南京大学 PASALab.阿里巴巴.Alluxio 在 2020 年 ...
- [FAQ] edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求
如果 edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求, 出现这类情况一般是在 debug 栏的 "设置" 中进行了过滤,可能是不小心点了 ...
- 2018-12-26-WPF-开启-ScrollViewer-的触摸滚动
title author date CreateTime categories WPF 开启 ScrollViewer 的触摸滚动 lindexi 2018-12-26 14:24:26 +0800 ...
- IEC104 从站/服务端模拟器 调试工具推荐
目录 IEC104 从站/服务端模拟器 调试工具推荐 主要功能 软件截图 IEC104 从站/服务端模拟器 调试工具推荐 下载地址:http://www.redisant.cn/iec104serve ...
- 关于Web的欢迎页面的开发设置
关于Web的欢迎页面的开发设置 每博一文案 命运总是不如人愿.但往往是在无数的痛苦中,在重重的矛盾和艰辛中,才是人成熟起来. 一次邂逅,一次目光的交融,就是永远的合二为一,就是与上帝的契约:总是风暴雷 ...
- Git reset 的hard、soft、mixed参数对比
目录 分区概念 1. --soft参数 2. --mixed参数 3. --hard参数 分区概念 先要清楚在本地,git会分三个区:工作区.暂存区.本地库. 当使用去做版本移动的时候,那么在使用[- ...
- 基于AIRIOT平台构建低成本、更聪明的智能环卫系统,让管理更加高效智能
环卫工程作为城市基础设施保障,是城市建设管理中不可或缺的重要组成部分.随着城市进程的加快及技术的进步,环卫工程管理也在逐渐向精细化.智能化.绿色化等趋势发展. 智能环卫依托物联网.AI.大数据等技术, ...
- MySQL 字段截取拼接
@ 目录 前言 需求: 拼接函数: 截取函数: 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文内容,下面案例可供参考 需求: 将数据库中的某一个字段的 ...
- Dubbo SPI扩展机制源码详解(基于2.7.10)
Dubbo SPI 一. 概述 本文主要分享 Dubbo 的拓展机制 SPI. 想要理解 Dubbo ,理解 Dubbo SPI 是非常必须的.在 Dubbo 中,提供了大量的拓展点,基于 Dubbo ...