83

对不起,如果这是一个新手问题。但我试图了解我应该使用什么。据我了解,卡夫卡是:

Apache Kafka 是一个分布式发布-订阅消息系统。

SNS 也是发布/订阅系统。

我的目标是在 AWS 上使用一些队列消息系统和将分布在少数服务器上的应用程序(顺便说一下,主要语言是 Python)。因为它在亚马逊上,所以我的第一个想法是使用 SNS 和 SQS。但后来我看到很多人在 AWS 上使用 Kafka。一个比另一个有什么优势?

4

3 回答 3

109

KafkaAmazon SQS / Amazon SNS的用例完全不同。

正如您所写,Kafka 是一个分布式发布-订阅系统。它专为非常高的吞吐量而设计,每秒处理数千条消息。当然,您需要自己设置和集群它。它支持多个阅读器,它们可以在任何时候“赶上”消息流(好吧,只要消息还在磁盘上)。您可以将其用作队列(使用消费者组)和主题。

一个重要特征是您不能选择性地将消息确认为“已处理”;唯一的选择是确认直到某个偏移量的所有消息。

另一方面,SQS/SNS:

  • 无需设置/无需维护
  • 队列 (SQS) 或主题 (SNS)
  • 各种限制(大小、消息的生存时间等)
  • 吞吐量有限:您可以执行批处理和并发请求,但仍要实现高吞吐量会很昂贵
  • 我不确定消息是否被复制;然而,SQS 中的至少一次保证交付建议如此
  • SNS 具有内置的电子邮件、SMS、SQS、HTTP 通知。使用 Kafka,您可能必须自己编写代码
  • 没有“消息流”的概念

所以总的来说,我会说 SQS/SNS 非常适合具有较少消息量的简单任务和工作负载。

于 2013-05-09T05:30:06.427 回答
65

这是一个经典的权衡:

AWS 工具(SQS、SNS)

这些将更容易让您设置并与您的架构的其余部分集成,尤其是如果其中大部分已经在 AWS 上运行。一开始它也可能更便宜,因为他们有很好的现收现付模式,但成本也不会扩大,所以你必须考虑一下。

阿帕奇卡夫卡

在这里,您使用的是一种非常流行(不流行)的分布式(如果您认为您会进行大量扩展,这很重要)PUB/SUB 模型。如今,这种模型似乎更受欢迎,因为对通过管道的数据进行分析非常普遍,并且通常使用 SOA 架构,您可以让大量小型服务使用消息并执行它们的操作,而无需数据被从队列中移除。您还可以获得很多配置选项,因此根据您的用例,您可以根据需要对其进行微调。这意味着更多的工作,但未来会提供更优化的服务。

概括

这是开发速度和开发易用性与最佳、非常模块化和个性化的解决方案之间的经典权衡,第一次实现的开销更大,但可扩展性更好。

个人建议

如果您正在对某些东西进行原型设计,请注意开发速度,因此 AWS 工具也是如此。如果您的需求被冻结并且需要大规模扩展,那么一定要花时间使用 kafka。我也非常相信使用开源使世界变得更好,但这并不是最大的论据。

于 2016-06-09T16:18:07.043 回答
2

上面提到的除了上面提到的点真的很有帮助

  1. 多租户 SQS/SNS 超级困难,也许现在有办法为每个租户创建单独的队列(很难维护)
  2. Kafka 是可集群的,集群实时连接到应用程序和数据库,并提供数据的键/值访问。每条消息的保留期,分发和复制都有更大的优势——SQS在哪里更像是一个黑匣子,发送消息和接收者,接收标记它已处理并删除。
于 2020-05-17T06:43:15.840 回答