我已经在 DCs 建立了2 个 Kafka(0.8.1.1)集群,一个在亚洲,另一个在欧洲。所有这些都是在 EC2 m1.xlarge**机器上运行。

我的目标是“高而稳定”的速度主题的数据从亚洲集群复制到欧洲集群**。

我最终得到了 3 个解决方案来实现这一目标如下:

(设 N =亚洲集群中某个主题的分区数.)

  1. 使用 Kafka 提供Mirrormaker-num.streams = N

它以约 30 Mbps 的速度运行速度非常慢,而我们预计约为 1 Gbps,因为当生产者向 Kafka 经纪人提供数据时,我们已经注意到亚洲集群的这一速率。

  1. 我尝试在欧洲使用 High-level API 创建我自己的Consumer版本,直接从亚洲集群中消费数据,最终以相同的速率在* 30 到 40 Mbps ****

我用这种方式设计了消费者。

  • 1消费者群体(1 kafka.javaapi.consumer.ConsumerConnector)

  • N线程来处理来自1 Consumer Group 的N

  1. 我尝试使用 High-level API 创建Consumer的另一个版本,结果大约是400 Mbps!,远远高于 2 提到的方式

这是我的新设计

  • N消费者群体(N kafka.javaapi.consumer.ConsumerConnector)具有相同的群组 ID

  • N线程处理N消费者群体

  • 1消费者组处理1

此外,N(分区)的数量越多,我从解决方案 3)获得的速度越高,而解决方案 1)和 2)的速度保持在 30Mbps**,而与 N 的值无关。

现在,为了达到解决方案 3)的速度达到 400 Mbps,我必须将我们的 N 设置为N = 60时非常大,亚洲集群主题中的每条消息都有**平均大小为 50KB * *。

所以我真正的问题是,我没有看到解决方案 3)与其他解决方案之间的技术差异,但是解决方案 3)消耗数据的速度如何变得与其他解决方案截然不同?