扩展Kafka的吞吐量

时间:2017-07-26 10:50:14

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

我在AWS上设置了示例Kafka群集,并尝试使用给定的配置确定可能的最大吞吐量。我目前正在关注此处提供的帖子进行此分析。

https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

如果您能澄清以下问题,我将不胜感激。

我发现使用给定硬件的大小为512字节(单个生产者 - 单个消费者)的消息的吞吐量为40MB / s。假设我需要达到80MB / s的吞吐量。

据我所知,有一种方法可以增加每个主题的分区数量,并增加生产者和消费者中的线程数。 (假设我没有更改批量大小,压缩比等的默认值。)

  1. 如何找到给定硬件可能达到的最大吞吐量?如果我们要进一步提高吞吐量,我们需要改善硬件资源的时间点?
  2. (换句话说,如何做出决定“使用X GB RAM和Y GB磁盘空间,这是我可以实现的最大吞吐量。如果我需要进一步提高吞吐量,我必须将RAM升级到XX GB和磁盘空间到YY GB“)

    2.我们应该垂直或水平缩放群集吗?推荐的方法是什么?

    谢谢。

1 个答案:

答案 0 :(得分:2)

  1. 如果我们将吞吐量定义为每秒通过网络传输的数据量,则最大吞吐量不应超过#machine number * bandwidth。如果一台机器的NIC配置为1Gbps,则单台机器上的最大TPS不能大于1Gbps。在你的情况下,TPS是40MB / s,即320Mbps,远低于1Gbps,这意味着仍有改进的余地。但是,如果你的目标远远大于1Gbps,你肯定需要更多的机器。

  2. AFAIK,带宽是造成系统瓶颈的最可能原因。与CPU和RAM不同,它不容易垂直缩放,因此水平缩放可能是一种选择。

  3. 你可以在缩放前做一些数学运算。假设吞吐量目标是"在1小时内产生20亿条512Bytes的记录"。这就是说,TPS必须达到2,000,000,000 * 8 * 512/3600/1024/1024 = 2170mbps。假设单台机器的可用带宽为700mbps(超过70%的使用率通常会导致数据包丢失'),应为生产者应用程序计划至少4台机器。