跳转至

kafka 理论极限性能预估

参考:Best practices for right-sizing your Apache Kafka clusters to optimize performance and cost

max(Tcluster) <= min{
  max(Tstorage) * #brokers / r,
  max(Tcds_network) * #brokers / r,

  max(Tbcc_network) * #brokers / (#consumer_groups + r - 1)
}

理想集群

假设集群在理想状态,即:

  • 所有 topic 的 分区 leader, 副本都均匀分布在每个 broker 上
  • 生产者/消费者对 topic 的每个分区的读写流量都是相同的
  • 生产消费行为之间是同步的,没有延迟

这时所有的 broker 都承载相同的流量和压力。

假设:

  • 集群写入流量:Tcluster
  • 集群节点数:#broker
  • 主题副本数:r
  • 消费组数:#consumer_groups
节点流入数据 = 生产者写入节点流量 + 副本同步拉取流量
             = Tcluster / #brokers + Tcluster / #brokers * (r - 1)
             = Tcluster / #brokers * r
节点流出数据 = 消费组读取节点流量 + 副本同步读取流量
             = Tcluster / #brokers * #consumer_groups + Tcluster / #brokers * (r – 1)
             = Tcluster / #brokers * (#consumer_groups + r - 1)

磁盘瓶颈

Tstorage = 节点流入数据
         = 生产者写入流量 + 副本同步写入流量
         = Tcluster / #brokers + Tcluster / #brokers * (r-1)
         = Tcluster / #brokers * r

max(Tcluster) <= max(Tstorage) * #brokers / r

#broker = Tcluster * r / max(Tstorage)

节点带宽瓶颈

Tbcc_network = 消费组读取流量 + 副本同步读取流量
             = Tcluster / #brokers * #consumer_groups + Tcluster / #brokers * (r – 1)
             = Tcluster / #brokers * (#consumer_groups + r - 1)

max(Tcluster) <= max(Tbcc_network) * #brokers / (#consumer_groups + r - 1)

#broker = Tcluster * (#consumer groups + r - 1) / max(Tbcc_network)