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

Vor*_*Vor 48 amazon-sqs amazon-web-services apache-kafka

对不起,如果是新手问题.但我试图了解我应该使用什么.据我所知,卡夫卡是:

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

而SNS也是pub/sub系统.

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

ada*_*amw 63

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

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

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

另一方面,SQS/SNS:

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

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

  • 不,生产者可以很简单,只需向 Kafka 发送消息即可。请参阅 http://kafka.apache.org/07/design.html 中的“自动生产者负载平衡”。 (2认同)
  • SQS 现在通过其标准队列宣传“无限吞吐量”。相比之下,较新的“仅处理一次的 FIFO 队列”的吞吐量非常有限:https://aws.amazon.com/about-aws/whats-new/2016/11/amazon-sqs-introduces-fifo-queues-标准队列只处理一次且价格更低/ (2认同)

nic*_*har 31

这是一个经典的权衡:

AWS工具(SQS,SNS)

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

阿帕奇卡夫卡

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

摘要

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

个人建议

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