kafka性能调优

本文详细探讨了Kafka的性能调优,包括主要优化原理和思路,如利用磁盘连续读写和并发提高吞吐量。重点介绍了JVM参数配置,建议使用G1垃圾回收器,以及Broker参数配置,如网络和IO操作线程优化、日志保留策略等。还涵盖了Producer和Consumer的优化策略,强调了Consumer Group的一对一消费关系。最后提供了所有参数配置列表和参考资料。
摘要由CSDN通过智能技术生成

主要优化原理和思路

kafka是一个高吞吐量分布式消息系统,并且提供了持久化。其高性能的有两个重要特点:

  • 利用了磁盘连续读写性能远远高于随机读写的特点;
  • 并发,将一个topic拆分多个partition。

要充分发挥kafka的性能,就需要满足这两个条件

kafka读写的单位是partition,因此,将一个topic拆分为多个partition可以提高吞吐量。但是,这里有个前提,就是不同partition需 要位于不同的磁盘(可以在同一个机器)。如果多个partition位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文 件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。

在linkedlin的测试中,每台机器就加载了6个磁盘,并且不做raid,就是为了充分利用多磁盘并发读写,又保证每个磁盘连续读写 的特性。

具体配置上,是将不同磁盘的多个目录配置到broker的log.dirs,例如
log.dirs=/disk1/kafka-logs,/disk2/kafka-logs,/disk3/kafka-logs
kafka会在新建partition的时候,将新partition分布在partition最少的目录上,因此,一般不能将同一个磁盘的多个目录设置到log.dirs

同一个ConsumerGroup内的Consumer和Partition在同一时间内必须保证是一对一的消费关系

任意Partition在某一个时刻只能被一个Consumer Group内的一个Consumer消费(反过来一个Consumer则可以同时消费多个Partition)

JVM参数配置

推荐使用最新的G1来代替CMS作为垃圾回收器。
推荐使用的最低版本为JDK 1.7u51。下面是本次试验中Broker的JVM内存配置参数:

-Xms30g -Xmx30g -XX:PermSize=48m -XX:MaxPermSize=48m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35

G1相比较于CMS的优势:

  • G1是一种适用于服务器端的垃圾回收器,很好的平衡了吞吐量和响应能力
  • 对于内存的划分方法不同,Eden, Survivor, Old区域不再固定,使用内存会更高效。G1通过对内存进行Region的划分,有效避免了内存碎片问题。
  • G1可以指定GC时可用于暂停线程的时间(不保证严格遵守)。而CMS并不提供可控选项。
  • CMS只有在FullGC之后会重新合并压缩内存,而G1把回收和合并集合在一起。
  • CMS只能使用在Old区,在清理Young时一般是配合使用ParNew,而G1可以统一两类分区的回收算法。

G1的适用场景:

  • JVM占用内存较大(At least 4G)
  • 应用本身频繁申请、释放内存,进而产生大量内存碎片时。
  • 对于GC时间较为敏感的应用。

JVM参数详解:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值