消息代理是什么?比较消息代理 SQS、Kinesis、Kafka 和 Pulsar 及用例

了解消息代理,比较不同的消息代理(如 SQS、Kinesis、Kafka 和 Pulsar)及其支持的用例。

什么是消息代理?

消息代理是异步分布式系统的重要组成部分。它在生产者-消费者模式中起着桥梁的作用。生产者将消息写入代理,消费者从代理读取消息。代理处理消息的排队、路由和传递。下图展示了在生产者-消费者模式中如何使用代理:

消息代理是什么?比较消息代理 SQS、Kinesis、Kafka 和 Pulsar 及用例

本文将讨论目前常用的代理服务器以及何时使用它们。

简单队列服务(SQS)

简单队列服务(SQS)由亚马逊网络服务(AWS)提供,是一种可管理的消息队列服务。AWS 全面管理队列,使 SQS 成为在 AWS 基础架构上运行的不同软件组件之间传递消息的简便解决方案。下文将详细介绍 SQS 支持的功能。

支持功能

  • 按量付费:SQS 只对读取和写入队列的消息收费。使用 SQS 不收取经常性费用或基本费用。
  • 易于设置:SQS 是完全托管的 AWS 服务,使用 SQS 无需进行基础设施设置。使用 SQS 提供的直接 REST API 或 AWS lambda 函数进行读写也很简单。
  • 支持 FIFO 队列:除了常规的标准队列,SQS 还支持 FIFO 队列。对于需要对消息进行严格排序的应用程序来说,FIFO 队列非常有用。
  • 规模:SQS 可随应用程序弹性扩展,无需担心容量和预配置问题。每个队列的报文数量没有限制,队列几乎可以提供无限的输出。
  • 失败消息队列/死信队列:所有无法处理的信息都会被发送到 “死信 “队列。SQS 会根据主队列的重试配置,将信息自动移入死信队列。

不支持功能

  • 缺乏信息广播:SQS 无法让多个消费者通过其 “只传输一次 “的传输方式检索同一消息。对于多个消费者用例,SQS 需要与 AWS SNS 一起使用,后者需要多个队列订阅到同一个 SNS 主题。
  • 重播:SQS 不具备重播旧消息的功能。有时在调试和测试时需要重播。

Kinesis

Kinesis 是 AWS 的另一个产品。Kinesis 流实现了大规模数据摄取和流数据的实时处理。与 SQS 一样,Kinesis 也是一项完全托管的服务。下面详细介绍了 Kinesis 支持哪些服务,不支持哪些服务。

支持

  • 易于设置:与 SQS 一样,Kinesis 也是完全托管的 AWS 服务,无需进行基础架构设置。
  • 消息广播:Kinesis 允许多个消费者同时从流中读取同一消息。
  • AWS 集成:作为其他 AWS 服务的一部分,Kinesis 与其他 AWS 服务无缝集成。
  • 重播:Kinesis 允许重放过去长达七天的消息,并为客户端提供在稍后时间消费消息的能力。
  • 实时分析:为实时摄取、处理和分析大型数据流提供支持。

不支持

  • 严格的消息排序:Kinesis 支持分片内的无序处理,但不保证分片之间的排序。
  • 缺乏死信队列:开箱即不支持死字队列。每个使用流的应用程序都必须自行处理故障。
  • 自动缩放:Kinesis 流无法根据需求动态扩展。流需要提前配置,以满足生产者和消费者的预期需求。
  • 成本:对于大量数据而言,与其他服务商相比,定价可能会很高。

Kafka

Kafka 是一个分布式事件存储和流处理平台。它是由 Apache 软件基金会开发的开源系统。Apache 以其高吞吐量和可扩展性而闻名。它在实时分析和监控方面表现出色。下面详细介绍了 Kafka 支持哪些功能,不支持哪些功能。

支持

  • 消息广播:Kafka 允许多个消费者从流中读取同一消息。
  • 重播:Kafka 允许从主题中的特定点重播消息。消息保留策略决定消息可以重放的时间。
  • 无限消息保留:Kafka 允许根据配置的保留策略无限制地保留消息。
  • 实时分析:为实时摄取、处理和分析大型数据流提供支持。
  • 开源:Kafka 是一个开放项目,因此得到了广泛采用和社区支持。它有很多可用的配置选项,可以根据具体使用情况进行微调。

不支持

  • 自动设置:由于 Kafka 是开放源代码,开发人员需要设置基础设施和 Kafka 集群。尽管如此,大多数公共云提供商都提供托管 Kafka。
  • 入门简单:对于没有通过托管服务的 Kafka 集群,了解基础设施可能会成为一项艰巨的任务。Apache 的确提供了大量文档,但新开发人员需要时间来理解。
  • 队列语义:从真正意义上讲,Kafka 是一个分布式不可变事件日志,而不是一个队列系统。它本质上并不支持将任务分配给多个 Worker,以便每个任务都能准确地处理一次。
  • 动态分区:很难动态更改 Kafka 主题的数量。这限制了系统在工作量增加时的可扩展性。大量分区需要预先配置,以支持最大负载。

Pulsar

Pulsar 是一个开源的分布式消息和流平台。它是由 Apache 软件基金会开发的开源系统。 它为实时数据流和处理提供了高度可扩展、灵活和耐用的功能。下面详细介绍了 Pulsar 支持哪些功能,不支持哪些功能。

支持

  • 多租户:Pulsar 作为一等公民支持多租户。它使用租户策略提供对数据和操作的访问控制。
  • 无缝异地复制:Pulsar 可跨多个区域同步数据,无需任何第三方复制工具。
  • 重播:与 Kafka 类似,Pulsar 允许从主题中的特定点重播消息。消息保留策略决定消息可重播的时间。
  • 无限消息保留:与 Kafka 类似,Pulsar 允许根据配置的保留策略无限制地保留消息。
  • 灵活的模式:Pulsar 支持流模型和队列模型。它在分区内提供严格的消息排序。

不支持

  • 自动设置:与 Kafka 类似,Apache 也是开源的,开发人员需要设置基础设施。
  • 强大的生态系统:与 Kafka 相比,Pulsar 相对较新。它不像 Kafka 那样拥有庞大的社区支持。
  • 开箱即用的集成:与 Kafka 和 SQS 相比,Pulsar 缺乏开箱即用的集成和支持。

结论

托管服务需要的维护工作最少,但非托管服务需要定期、专门的维护能力。另一方面,与托管服务相比,非托管服务提供了更好的灵活性和调整机会。最后,选择合适的代理取决于项目的需求。了解每种代理的优势和不足有助于开发人员做出明智的决定。

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/48002.html

(0)

相关推荐

发表回复

登录后才能评论