首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Kafka (或其他解决方案)在多个数据中心中的服务器之间组织非关键消息的交换?

如何使用Kafka (或其他解决方案)在多个数据中心中的服务器之间组织非关键消息的交换?
EN

Software Engineering用户
提问于 2017-10-29 21:54:00
回答 1查看 214关注 0票数 3

我们需要组织一种在多个数据中心中的服务器之间交换消息的方法。消息并不重要。我们只需要能够从任何数据中心的任何服务器发送消息到任何数据中心中的任何其他服务器。

我们正在考虑使用Kafka作为这个用例的消息代理,但我们不确定它是否是一个好的选择。

正如我们所理解的,如果集群分布在多个数据中心之间,Kafka将无法正常工作(因为它必须与Zookeeper一起工作,这更像是一个单一的数据中心解决方案)。我们考虑在每个数据中心使用单独的集群。每个服务器必须连接到所有数据中心中的所有Kafka集群。这就是为什么任何服务器都可以向任何数据中心中的任何其他服务器发送消息。

因此,每个服务器都有n个连接。所有连接的总数为: n*m,其中n-是数据中心的总数,m是服务器的总数。

有可能减少到m的连接总数吗?也就是说,所有服务器只能连接到本地Kafka集群。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2017-10-31 16:48:14

我们决定使用类似于Todd (来自LinkedIn的员工站点可靠性工程师)的体系结构。即他们在LinkedIn中使用的体系结构。

我们已经决定为每个服务器使用一个独特的主题。主题名称必须具有数据中心标识符和服务器标识符(在该数据中心中)。

因此,例如,如果我们有3个数据中心,每个数据中心有3个节点,那么我们将有下一个主题:

DC1_1,DC1_2,DC1_3;

DC2_1,DC2_2,DC2_3;

DC3_1,DC3_2,DC3_3;

必须在所有集群中创建相同的主题(在我们的情况下,每个集群中有9个主题)。每个数据中心都使用MirrorMaker来消耗本地集群所需的数据,并在本地集群中生成这些数据。

因此,我们的本地集群是同时聚集的集群,我们为我们的本地集群生产。

我们已经看到托德·帕里诺的介绍性和hi说过“永远不要产生聚合集群”之类的话。但他的解释是,您生成的数据不会被复制到其他聚合集群中。但问题是,我们不会在任何其他集群中复制本地数据(这些数据由本地消费者使用)。只有与本地集群相关的数据才会从外部集群生成到本地集群中。因此,在我们的情况下,可以生成聚集的簇。

上面的示例可以用以下体系结构来表示:

正如您所看到的,API服务器(它是我们的生产者和消费者)只从本地Kafka集群生产和消费。此外,每个使用者只从具有与使用者标识符相同的标识符的主题消费(即API服务器DC1_1将只从主题DC1_1消费)。如您所见,每个MirrorMaker只为必须在本地数据中心中使用的主题使用数据(即在DC1中使用的主题将是DC1_1、DC1_2、DC1_3)。这些主题(本地主题)不会被其他MirrorMaker实例复制,因此我们可以在本地集群中发布和使用这些主题。外部主题的数据存储可能相对较小(取决于您的负载)。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/359936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档