抱歉,如果这是一个新手问题。但我试图了解我应该使用什么。据我了解卡夫卡是:
Apache Kafka is a distributed publish-subscribe messaging system.
SNS 也是发布/订阅系统。
我的目标是在 AWS 上使用一些队列消息传递系统,该系统的应用程序将分布在少数服务器上(顺便说一下,主要语言是 Python)。而且因为是在亚马逊上,所以我第一个想到的是使用SNS和SQS。但后来我看到很多人在 AWS 上使用 Kafka。两者相比有何优势?
最佳答案
Kafka 的用例和 Amazon SQS/Amazon SNS完全不同。
正如您所写,Kafka 是一个分布式发布订阅系统。它专为非常高的吞吐量而设计,每秒处理数千条消息。当然,您需要自己设置和集群。它支持多个读取器,这些读取器可以在任何时候“ catch ”消息流(只要消息仍在磁盘上)。您可以将其用作队列(使用消费者组)和主题。
一个重要的特征是您不能选择性地将消息确认为“已处理”;唯一的选择是确认一定偏移量内的所有消息。
另一方面,SQS/SNS:
- 无需设置/无需维护
- 队列 (SQS) 或主题 (SNS)
- 各种限制(大小、消息的生存时间等)
- 吞吐量有限:您可以执行批量和并发请求,但仍然实现高吞吐量的成本高昂
- 我不确定消息是否被复制;然而,SQS 中的至少一次保证交付会表明如此
- SNS 内置电子邮件、短信、SQS、HTTP 通知。使用 Kafka,您可能需要自己编写代码
- 没有“消息流”概念
总的来说,我认为 SQS/SNS 非常适合消息量较少的简单任务和工作负载。
关于amazon-web-services - Kafka、SNS 还是其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449126/