卡夫卡消费者从磁盘读取缓存

时间:2017-08-02 04:33:49

标签: caching amazon-ec2 apache-kafka kafka-consumer-api kafka-producer-api

我在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. 在观察1中,由于我没有观察到任何磁盘读取,所有数据是否都可以从内存中获取(缓存的位置)?

  2. 在观察2中,我假设由于磁盘读取而性能下降。虽然它从磁盘读取,但仍然有足够的可用内存可用,如nmon报告所示。

  3. 消费者从磁盘而不是内存中读取的原因是什么?生产者生成的数据会在缓存中保留多长时间?

    1. 我假设最大40MB / s的读取吞吐量是由于m4.large EC2实例的网络带宽限制造成的。这个假设是否正确?
    2. 谢谢。

1 个答案:

答案 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