扩展 Kafka 的吞吐量

Scaling Kafka for Throughput

我已经在 AWS 上设置了一个示例 Kafka 集群,并且正在尝试确定给定配置下可能的最大吞吐量。我目前正在关注此处提供的 post 以进行此分析。

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

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

对于给定的硬件,我观察到 512 字节大小的消息(单一生产者 - 单一消费者)的吞吐量为 40MB/s。假设我需要达到 80MB/s 的吞吐量。

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

  1. 如何找到给定硬件的最大吞吐量?如果要进一步提高吞吐量,我们需要提高硬件资源到什么程度?

(换句话说如何做出决定"With X GB RAM and Y GB disk space this is the maximum throughput I can achieve. If I need to further improve the throughput I have to upgrade RAM to XX GB and disk space to YY GB")

2.Should 我们垂直或水平扩展集群?推荐的方法是什么?

谢谢。

  1. 如果我们将吞吐量定义为每秒通过网络传输的数据量,则最大吞吐量不应超过#machine number * bandwidth。给定网卡配置为1Gbps的单机,单机最大TPS不能大于1Gbps。你的TPS是40MB/s,即320Mbps,比1Gbps还差很多,还有提升的空间。但是,如果您的目标远大于 1Gbps,您肯定需要更多机器。

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

你可以在缩放之前做一些数学运算。假设吞吐量目标是 "produce 2 billion of records with 512Bytes in 1 hour"。也就是说,TPS要达到2,000,000,000 * 8 * 512 / 3600 / 1024 / 1024 = 2170mbps。假设单机可用带宽为700mbps(超过70%使用率正常'packet loss'),生产者应用至少要规划4台机器