硬件选择
kafka的broker的硬件选择可以说是一门艺术。Kafka本身不需要太特殊的硬件,它可以运行在任何机器上。但是一旦考虑到性能,就有很多因素需要考虑了,比如:磁盘的吞吐和容量,内存,网络以及CPU。一旦你知道你的环境哪种性能是瓶颈,那么你就可以进行相应的硬件升级了。
磁盘吞吐
Producer客户端生产消息的性能主要取决于broker磁盘写入的速度。Kafka的消息在产生的时候在本地存储,并且大多数的客户端都会一直等到broker确认写入成功后,才认为消息提交成功。这就意味着越快的磁盘写入就会带来越小的延迟。
所以在磁盘的选择上,可以选择HDD硬盘或者是SSD固态硬盘。固态硬盘在读写的时候性能都更高,但是普通的机械硬盘也更经济实惠。你也可以通过设置多个存储路径或者RAID,提高硬盘的使用率。另外,驱动也会影响消息的吞吐,比如SAS或者SATA。
磁盘容量
容量是存储的另一关键指标,你想要保留多长时间或者多少的数据,就决定了你的磁盘容量至少要满足多少。如果broker每天都有1T的数据量,消息的保存时间为7天,那么你至少需要7T的磁盘空间。当然也需要考虑10%的空间用来存储其他的文件,以及用户缓存的空间。
存储容量也是衡量Kafka集群规模的标志,集群的总容量可以通过主题切分多个分区来进行就扩展,这样多个broker可以共同分担存储压力。
内存
除了磁盘性能,内存也是一个很重要的指标。磁盘的性能会影响生产者产生消息的效率,内存效率也会有很大的影响。因为正常情况下kafka消费者的操作都是读取分区的末尾消息,它不会跟生产者产生消息的时间差距很大。在这种情况下,消息一般都是直接缓存在内容,消费者直接从内存中消费数据,这样效率更快一些。
Kafka本身不需要为JVM分配很大的内容。对于5G的堆内存每秒处理XM的数据也是没问题的。kafka使用页缓存也是很有好处的,这也是为什么推荐kafka不要与其他的应用部署在一个服务器上,因为这样会干扰页缓存的效率,会产生很多脏页。
网络
Kafka会占用很大的网络带宽,这也是一个很重要的指标。在多个消费者的时候,也需要考虑kafka在传输和读取上的网络压力。一个生产者每秒钟向一个主题写入1M的数据,但是所有的消费者都会读取这部分的数据。其他的操作,比如几区你的备份、镜像等等都会增加网络压力。 在网络情况不好的时候,集群的备份会有延迟,此时整个集群也会变得脆弱。
CPU
CPU计算的能力,相对于磁盘内存来说,不是那么重要,但是它也会影响Broker的性能。因为一般来说生产者的消息都会在broker进行压缩存储,以此来节省网络带宽以及磁盘空间。这需要kafka先解压缩,然后按照一定的规则再组织消息,最终再压缩存储到磁盘。这也是kafka大部分需要计算性能工作的地方,但是这不是选择硬件标准的主要因素。
CIO之家 www.ciozj.com 公众号:imciow