我已经在 DCs 建立了2 个 Kafka(0.8.1.1)集群,一个在亚洲,另一个在欧洲。所有这些都是在 EC2 m1.xlarge**机器上运行。
我的目标是以“高而稳定”的速度将主题的数据从亚洲集群复制到欧洲集群**。
我最终得到了 3 个解决方案来实现这一目标如下:
(设 N =亚洲集群中某个主题的分区数.)
- 使用 Kafka 提供Mirrormaker,-num.streams = N。
它以约 30 Mbps 的速度运行速度非常慢,而我们预计约为 1 Gbps,因为当生产者向 Kafka 经纪人提供数据时,我们已经注意到亚洲集群的这一速率。
- 我尝试在欧洲使用 High-level API 创建我自己的Consumer版本,直接从亚洲集群中消费数据,最终以相同的速率在* 30 到 40 Mbps ****
我用这种方式设计了消费者。
-
1消费者群体(1 kafka.javaapi.consumer.ConsumerConnector)
-
N线程来处理来自1 Consumer Group 的N流
- 我尝试使用 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)消耗数据的速度如何变得与其他解决方案截然不同?