卡夫卡或SNS还是其他什么?

时间:2013-05-08 19:55:38

标签: amazon-web-services amazon-sqs apache-kafka

很抱歉,这是一个新手问题。但我试图了解我应该使用什么。据我所知,卡夫卡是:

  

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

SNS也是pub / sub系统。

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

3 个答案:

答案 0 :(得分:53)

KafkaAmazon SQS / Amazon SNS的用例非常不同。

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

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

另一方面,

SQS / SNS:

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

总的来说,我认为SQS / SNS非常适合于更简单的任务和工作量较少的消息。

答案 1 :(得分:23)

这是一个经典的权衡:

AWS工具(SQS,SNS)

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

Apache Kafka

在这里,您使用的是非常受欢迎(非流行)的分布式(如果您认为可以扩展很多,这很重要)PUB / SUB模型。如今,这个模型似乎更受欢迎,因为对通过管道的数据进行分析是非常常见的,并且通常使用SOA体系结构,您可以拥有大量的小型服务来消费消息并完成他们的工作,而无需数据从队列中删除。您还可以获得 lot 配置选项,因此根据您的使用情况,您可以根据需要对其进行微调。这意味着更多的工作,但在未来的道路上将提供更优化的服务。

摘要

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

个人建议

如果您正在进行原型设计,请支持开发速度,那么AWS工具。如果您的要求被冻结并需要大规模,请务必花时间使用kafka。我也非常相信使用开源让世界变得更好,但这并不是最常用的论据。

答案 2 :(得分:0)

上面提到的

除上述几点外,真的很有帮助

  1. 多租户SQS / SNS超级困难,也许现在有办法为每个租户创建单独的队列(很难维护)
  2. Kafka是可集群的,可实时集群连接到应用程序和数据库,并提供对数据的键/值访问。每个邮件的保留期,分发和复制都具有更大的优势-SQS更像是黑盒,发送邮件和接收者,接收已处理并删除的标记。