卡夫卡制片人和经纪人吞吐量限制

时间:2017-08-02 12:26:39

标签: apache-kafka kafka-consumer-api kafka-producer-api

我在AWS上配置了一个双节点六分区Kafka群集,复制因子为2。每个Kafka节点都在由EBS支持的m4.2xlarge EC2实例上运行。

据我所知,从Kafka制作人到Kafka经纪人的数据流速受限于制作人的网络带宽。

假设Kafka生产商和代理之间的网络带宽为1Gbps(约125 MB / s),Kafka代理和存储之间(EC2实例和EBS卷之间)的带宽为1 Gbps。

我使用org.apache.kafka.tools.ProducerPerformance工具来分析性能。

我观察到,当消息大小为100字节时,单个生产者可以以大约90 MB / s的速度向代理写入。(因此网络未饱和)

我还观察到EBS卷的磁盘写入速率约为120 MB / s。

这是90 MB / s是由于某些网络瓶颈还是Kafka的限制? (为简单起见,忘记批量大小和压缩等)

这可能是由于代理和ebs卷之间的带宽限制吗?

我还观察到,当两​​个生产者(来自两个独立的机器)生成数据时,一个生产者的吞吐量降至约60 MB / s。

这可能是什么原因?为什么这个值达不到90 MB / s?这可能是由于经纪人和ebs卷之间的网络瓶颈造成的吗?

令我困惑的是,在两种情况下(单个生产者和两个生产者),ebs的磁盘写入速率保持在120 MB / s左右(接近其上限)。

谢谢

2 个答案:

答案 0 :(得分:1)

根据我的理解,我遇到了同样的问题,在第一种情况下,一个生产者正在向两个经纪人发送数据(网络中没有其他内容),所以你得到90 MB / s,每个经纪人的速度为45MB / s(约),但在第二种情况下,两个生产者正在向两个经纪人发送数据,因此从生产者的角度来看,它能够以60 MB / s的速度发送数据,但从经纪人的角度来看,它正在以60MB / s的速度接收数据。所以你实际上可以通过kafka推送更多数据。

答案 1 :(得分:1)

有几件事需要考虑:

  1. 有适用于实例和卷的单独磁盘和网络限制。
  2. 您必须考虑复制。如果RF = 2,则单个节点的写入流量为2 *(PRODUCER_TRAFFIC)/(PARTITION_COUNT),假设跨分区的写入均匀分布。