鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

调优思路

  1. 为了能够让磁盘性能达到最大,partitions的数目总数需要大于磁盘数目,这样可以让每个磁盘至少拥有1个partition,否则该盘可能未被利用。
  2. Kafka的一个重要特点就是会对收到的消息都保存到磁盘,而不是只存在于内存中。但是磁盘的读写速率较慢会对数据的实时性产生一定影响,所以Kafka一般会先使用内存cache保存数据,然后再使用异步线程进行刷盘操作。这样极大的提高了Kafka持久化数据的速度,保证了实时性。Kafka主要为IO型组件,在不启用压缩算法时,对CPU的消耗非常低;但如果使用压缩算法,特别是在消费场景会占用大量CPU(由于压缩算法特性,往往解压速度较快,所以可以令消费吞吐量发生质的提升)。
  3. 由于集群部署以及多副本的原因,Kafka的数据要写入到各个节点前,数据都是通过网络来传输的,所以Kafka对网络的要求非常高,从一定程度上来讲,Kafka多少吞吐量,就需要多少网络带宽。虽然Kafka是一个只将数据保存在磁盘中的组件,但事实上,Kafka对硬盘的依赖反而并没有这么高。Kafka的性能指标时延与吞吐量,其中时延是由系统缓存来保证的,kafka在生产数据时,都只将数据写在缓存中,而由异步线程从缓存中同步到硬盘,所以Kafka会要求硬盘读写总带宽有一定的程度(可通过累加磁盘数目解决),但对硬盘的读写速率要求并不高。
  4. 生产测试时,可以在每台客户端上启动多个kafka-producer-perf-test.sh进行生产,生产的消息为同一个topic的,生产时间180秒,到时间后停止所有生产进程。
  5. 消费测试时,可以在每台客户端上启动多个kafka-consumer-perf-test.sh对生产测试的topic进行消费,消费时所有进程采用相同的group,将消息消费完所需时间与生产时间基本一致也为180秒。