首页 > 其他分享 >Kafka多维度调优

Kafka多维度调优

时间:2024-06-12 16:35:30浏览次数:16  
标签:层面 多维度 Broker Kafka 调优 线程 内存 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层面调优

image

image

(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)合理利用多线程进行推送,消费消息

标签:层面,多维度,Broker,Kafka,调优,线程,内存,kafka
From: https://www.cnblogs.com/iamxiaofu/p/18243430

相关文章

  • Deploy Kafka for Centos 7
    应用介绍Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写,用于处理消费者在网站中的所有动作流数据。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来......
  • spark读取Kafka数据写入postgreSQL
    Java代码importorg.apache.spark.SparkConf;importorg.apache.spark.api.java.function.VoidFunction;importorg.apache.spark.streaming.api.java.JavaInputDStream;importorg.apache.spark.streaming.api.java.JavaStreamingContext;importorg.apache.spark.stream......
  • Apache Kafka框架
    简述:ApacheKafka是一个基于发布/订阅模式的分布式流数据处理系统,用于实时事件流处理和数据流中转。其架构包括生产者、代理、主题、分区、消费者和ZooKeeper组件,通过它们的协作实现高吞吐量、可水平扩展、持久性、容错性等特点,适用于构建实时数据管道、实时数据分析等场景。......
  • Redis的监控与调优:工具使用和性能提升技巧
    I.引言A.介绍Redis的重要性,以及为什么需要对Redis进行监控和调优 Redis是一种内存数据结构存储系统,它支持多种数据类型,如字符串、列表、集合、哈希表等,并提供了丰富的操作命令。Redis的高性能和灵活性使其在许多场景中都发挥了重要作用,例如,作为缓存降低数据库的访问压......
  • 在Linux中,性能调优都有哪几种方法?
    在Linux中,性能调优是一个综合性的过程,旨在提升系统的运行效率、响应速度和资源利用率。以下是一些关键的性能调优方法:监控与分析使用工具如top,htop,vmstat,iostat,netstat,dstat,iftop,nmon等监控CPU使用率、内存使用、磁盘I/O、网络流量等,以便识别瓶颈。利用sysdig......
  • Kafka源码分析(十八)——Broker:日志子系统——整体架构
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Kafka源码分析(十九)——Broker:日志子系统——Log
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Kafka 主题 CLI 教程
    KafkaTopicsCLI,即kafka-topics用于创建、删除、描述或更改Kafka中的主题。请确保您已预先启动Kafka 如何创建Kafka主题?要创建Kafka主题,我们需要提供必需的参数:如果是Kafkav2.2+,请使用Kafka主机名和端口,例如,localhost:9092如果是旧版本的Kafka,请使用Zook......
  • 深入解析Kafka消息丢失的原因与解决方案
    深入解析Kafka消息丢失的原因与解决方案ApacheKafka是一种高吞吐量、分布式的消息系统,广泛应用于实时数据流处理。然而,在某些情况下,Kafka可能会出现消息丢失的情况,这对于数据敏感的应用来说是不可接受的。本文将深入解析Kafka消息丢失的各种原因,包括生产者、broker和消费......
  • 深入解析Kafka消息传递的可靠性保证机制
    深入解析Kafka消息传递的可靠性保证机制Kafka在设计上提供了不同层次的消息传递保证,包括atmostonce(至多一次)、atleastonce(至少一次)和exactlyonce(精确一次)。每种保证通过不同的机制实现,下面详细介绍Kafka如何实现这些消息传递保证。1.AtMostOnce(至多一次)在这种模......