---
title: 调优思路
description: "1. 为了能够让磁盘性能达到最大，Partitions的数目需要大于磁盘数目，这样可以让每个磁盘至少拥有1个partition，否则该盘可能未被利用。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/Kafka/kunpengkafkahdp_05_0005.html
sourcePath: /source/zh/kunpengbds/ecosystemEnable/Kafka/kunpengkafkahdp_05_0005.html
indexId: 9dfc072ffb7a3eeffed264ba10341cb086cff77924f579ecf5ba11399b25bae172
---
# 调优思路

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秒。
