对不起,如果这是一个新手问题。但我试图了解我应该使用什么。据我了解,卡夫卡是:
Apache Kafka 是一个分布式发布-订阅消息系统。
SNS 也是发布/订阅系统。
我的目标是在 AWS 上使用一些队列消息系统和将分布在少数服务器上的应用程序(顺便说一下,主要语言是 Python)。因为它在亚马逊上,所以我的第一个想法是使用 SNS 和 SQS。但后来我看到很多人在 AWS 上使用 Kafka。一个比另一个有什么优势?
对不起,如果这是一个新手问题。但我试图了解我应该使用什么。据我了解,卡夫卡是:
Apache Kafka 是一个分布式发布-订阅消息系统。
SNS 也是发布/订阅系统。
我的目标是在 AWS 上使用一些队列消息系统和将分布在少数服务器上的应用程序(顺便说一下,主要语言是 Python)。因为它在亚马逊上,所以我的第一个想法是使用 SNS 和 SQS。但后来我看到很多人在 AWS 上使用 Kafka。一个比另一个有什么优势?
Kafka和Amazon SQS / Amazon SNS的用例完全不同。
正如您所写,Kafka 是一个分布式发布-订阅系统。它专为非常高的吞吐量而设计,每秒处理数千条消息。当然,您需要自己设置和集群它。它支持多个阅读器,它们可以在任何时候“赶上”消息流(好吧,只要消息还在磁盘上)。您可以将其用作队列(使用消费者组)和主题。
一个重要特征是您不能选择性地将消息确认为“已处理”;唯一的选择是确认直到某个偏移量的所有消息。
另一方面,SQS/SNS:
所以总的来说,我会说 SQS/SNS 非常适合具有较少消息量的简单任务和工作负载。
这是一个经典的权衡:
这些将更容易让您设置并与您的架构的其余部分集成,尤其是如果其中大部分已经在 AWS 上运行。一开始它也可能更便宜,因为他们有很好的现收现付模式,但成本也不会扩大,所以你必须考虑一下。
在这里,您使用的是一种非常流行(不流行)的分布式(如果您认为您会进行大量扩展,这很重要)PUB/SUB 模型。如今,这种模型似乎更受欢迎,因为对通过管道的数据进行分析非常普遍,并且通常使用 SOA 架构,您可以让大量小型服务使用消息并执行它们的操作,而无需数据被从队列中移除。您还可以获得很多配置选项,因此根据您的用例,您可以根据需要对其进行微调。这意味着更多的工作,但未来会提供更优化的服务。
这是开发速度和开发易用性与最佳、非常模块化和个性化的解决方案之间的经典权衡,第一次实现的开销更大,但可扩展性更好。
如果您正在对某些东西进行原型设计,请注意开发速度,因此 AWS 工具也是如此。如果您的需求被冻结并且需要大规模扩展,那么一定要花时间使用 kafka。我也非常相信使用开源使世界变得更好,但这并不是最大的论据。
上面提到的除了上面提到的点真的很有帮助