我在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左右(接近其上限)。
谢谢
答案 0 :(得分:1)
根据我的理解,我遇到了同样的问题,在第一种情况下,一个生产者正在向两个经纪人发送数据(网络中没有其他内容),所以你得到90 MB / s,每个经纪人的速度为45MB / s(约),但在第二种情况下,两个生产者正在向两个经纪人发送数据,因此从生产者的角度来看,它能够以60 MB / s的速度发送数据,但从经纪人的角度来看,它正在以60MB / s的速度接收数据。所以你实际上可以通过kafka推送更多数据。
答案 1 :(得分:1)
有几件事需要考虑: