卡夫卡或SNS或其他啥? [关闭]

Posted

技术标签:

【中文标题】卡夫卡或SNS或其他啥? [关闭]【英文标题】:Kafka or SNS or something else? [closed]卡夫卡或SNS或其他什么? [关闭] 【发布时间】:2013-05-03 04:22:30 【问题描述】:

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

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

SNS 也是发布/订阅系统。

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

【问题讨论】:

kafka 具有用于复制的复制因子。为什么说消息没有在 kafka 中复制?检查 kafka.apache.org/08/configuration.html 处的“default.replication.factor”。 【参考方案1】:

Kafka 和 Amazon SQS/Amazon SNS 的用例完全不同。

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

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

另一方面,SQS/SNS:

无需设置/无需维护 队列 (SQS) 或主题 (SNS) 各种限制(大小、消息的生存时间等) 吞吐量有限:您可以处理批量和并发请求,但仍要实现高吞吐量会很昂贵 我不确定消息是否被复制;然而,SQS 中的至少一次保证交付建议如此 SNS 具有内置的电子邮件、SMS、SQS、HTTP 通知。使用 Kafka,您可能需要自己编写代码 没有“消息流”概念

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

【讨论】:

感谢您的回复。我花了一些时间和红关于卡夫卡。我不得不说我非常喜欢它。但有一部分还不清楚。在 kafka 模型中生产者-经纪人-消费者。生产者应该是非常复杂的机制,它可能会使用一些负载均衡器和循环算法......我是对的吗?因为从我的角度来看,一个生产者应该向代理加载更多的内容,而不是“类似”消费者可以读取的内容,对吧? 不,生产者可以很简单,只需向 Kafka 发送消息。请参阅kafka.apache.org/07/design.html 中的“自动生产者负载平衡”。 根据kafka.apache.org/documentation.html 的 Kafka 文档,Kafka 可以用作传统队列:“如果所有消费者实例具有相同的消费者组,那么这就像传统的队列平衡负载一样工作消费者。” @nichochar 当然,我编辑了答案,它是 3 年前写的 :) SQS 现在通过其标准队列宣传“无限吞吐量”。相比之下,较新的“仅处理一次的 FIFO 队列”的吞吐量非常有限:aws.amazon.com/about-aws/whats-new/2016/11/…【参考方案2】:

这是一个经典的权衡:

AWS 工具(SQS、SNS)

这些对您来说将更容易设置,并与您的架构的其余部分集成,尤其是如果其中大部分已经在 AWS 上运行。一开始它也可能更便宜,因为他们有很好的现收现付模式,但成本也不会增加,所以你必须考虑一下。

阿帕奇卡夫卡

在这里,您使用的是非常流行(不流行)的分布式(如果您认为自己会进行大量扩展,这一点很重要)PUB/SUB 模型。如今,这种模型似乎更受欢迎,因为对通过管道的数据进行分析非常普遍,并且通常使用 SOA 架构,您可以让大量小型服务使用消息并执行它们的操作,而无需数据被从队列中移除。您还可以获得很多个配置选项,因此您可以根据您的用例对其进行微调以满足您的需求。这意味着更多的工作,但未来会提供更优化的服务。

总结

这是开发速度和易于开发与最佳、非常模块化和个性化的解决方案之间的经典权衡,第一次实现的开销更大,但可扩展性更好。

个人建议

如果您要对某样东西进行原型设计,请优先考虑开发速度,尤其是 AWS 工具。如果您的需求被冻结并且需要大规模扩展,那么一定要花时间使用 kafka。我也非常相信使用开源让世界变得更好,但这并不是最大的理由。

【讨论】:

【参考方案3】:

除了上面提到的点,真的很有帮助

    多租户 SQS/SNS 非常困难,也许现在有办法为每个租户创建单独的队列(非常难以维护) Kafka 是可集群的,集群实时连接到应用程序和数据库,并提供数据的键/值访问。每条消息的保留期,分发和复制都有更大的优势——SQS在哪里更像是一个黑匣子,发送消息和接收者,接收标记它已处理并删除。

【讨论】:

以上是关于卡夫卡或SNS或其他啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

每小时或每天都有一个卡夫卡主题是典型的吗?

处理卡夫卡中具有依赖关系的数据时的最佳实践?

卡夫卡长轮询

卡夫卡多个生产者写同一主题?

如何暂停卡夫卡消费者?

IBM AIX - 阿帕奇卡夫卡