amazon-web-services - Kafka、SNS 还是其他什么?

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

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

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/

相关文章:

amazon-web-services - AWS CloudFormation 忽略现有资源

javascript - 我可以仅使用 html 页面查询 dynamodb 表吗?

amazon-web-services - 以 SQS 队列为目标的 CloudWatch 事件无法正常工作

amazon-web-services - SQS 到 Lambda 到 SNS 可能吗?

apache-spark - 有没有办法动态停止 Spark Structured Streaming?

c# - 使用 IAmazonDynamoDB 或 IDynamoDBContext (两者都?)

linux - 如何在亚马逊 Linux 上安装 openjdk "1.8.0_20-b26"?

amazon-web-services - Spring Integration + SQS - 异常重试不起作用

java - Openshift 上带有 Strimzi 运算符的 Apache Kafka - 无法连接

apache-kafka - Kafka Rest 代理 JSON 模式验证