我在AWS上配置了一个双节点Kafka群集,目前正在测试其性能属性。
我使用kafka-consumer-perf-test.sh使用单个线程从Kafka主题中读取5000万条消息。
我在测试消费者吞吐量时观察到以下情况。
观察1
m4.large EC2实例上的单个使用者 - 读取吞吐量40.2MB /秒
三个独立的m4.large EC2实例的三个消费者 - 个人阅读吞吐量 - 40.25MB /秒。
Kafka经纪人方面没有报告任何磁盘读取或写入(在2个EBS卷支持的两个单独的m4.2xlarge EC2实例上运行)
一段时间后我再次运行该工具。
观察2
三个独立的m4.large EC2实例的三个消费者 - 个人阅读吞吐量降至 - 34.25MB /秒。
在这种情况下,我观察到Kafka代理节点中的磁盘读取率相当高。
如果您能帮助我澄清以下内容,我将不胜感激。
在观察1中,由于我没有观察到任何磁盘读取,所有数据是否都可以从内存中获取(缓存的位置)?
在观察2中,我假设由于磁盘读取而性能下降。虽然它从磁盘读取,但仍然有足够的可用内存可用,如nmon报告所示。
消费者从磁盘而不是内存中读取的原因是什么?生产者生成的数据会在缓存中保留多长时间?
谢谢。
答案 0 :(得分:1)
建议调整Linux内核参数vm.swappiness = 1
以确保最佳地使用页面缓存进行读取并避免磁盘I / O.
请参阅https://en.m.wikipedia.org/wiki/Swappiness
此外,建议在自己的虚拟机或物理服务器上单独运行Kafka,以便所有可用的RAM都可用于页面缓存。
Confluent刚刚发布了基于AWS的AK 0.11(Confluent 3.3)基准测试结果,如果您想进行比较,其中包括有和没有页面缓存命中的测试
基准测试是此博客文章中的链接
https://www.confluent.io/blog/we-will-say-exactly-confluent-platform-3-3-available-now/
基准测试结果在这里
https://docs.google.com/spreadsheets/u/1/d/1dHY6M7qCiX-NFvsgvaE0YoVdNq26uA8608XIh_DUpI4/htmlview