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