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