用于微服务的消息队列(如 RabbitMQ)或 Kafka?

Posted

技术标签:

【中文标题】用于微服务的消息队列(如 RabbitMQ)或 Kafka?【英文标题】:Message queue (like RabbitMQ) or Kafka for Microservices? 【发布时间】:2020-03-01 12:59:54 【问题描述】:

我们正在启动一个新项目,我们正在评估用于微服务之间异步通信的技术堆栈?为此,我们正在考虑使用 RabbitMQ 和 Kafka。

任何人都可以阐明在这两者之间做出选择的关键考虑因素吗?

谢谢

【问题讨论】:

你试过脉冲星吗?似乎是一个更好的卡夫卡 【参考方案1】:

选择取决于您的微服务到底需要什么。与其他相比,两者都有不同的东西。

RabbitMQ简而言之

谁是玩家:

    消费者 出版商 交流 路线

流程从 Publisher 开始,它发送消息到 Exchange,Exchange 是一个中间件层,知道将消息路由到队列,消费者可以定义他们从哪个队列消费(通过定义绑定),RabbitMQ 推送消息发送给消费者,一旦消费和确认到达,消息就会从队列中删除。 该系统中的任何部分都可以横向扩展:生产者、消费者以及 RabbitMQ 本身都可以集群化,并且具有高可用性。

卡夫卡

谁是玩家

    消费者/消费者群体 制片人 Kafka 源连接 Kafka 接收器连接 主题和主题分区 Kafka 流 经纪人 动物园管理员

Kafka 是一个强大的系统,并且在游戏中有多个成员。但是一旦你很好地理解了流程,这将变得易于管理和使用。 生产者向主题发送消息记录,主题是发布记录的类别或提要名称,可以对其进行分区,以获得更好的性能,消费者订阅主题并开始从中拉消息,当主题分区,然后每个分区都有自己的消费者实例,我们将同一消费者的所有实例称为消费者组。 在 Kafka 中,消息始终保留在主题中,即使它们已被使用(限制时间由保留策略定义) 此外,Kafka 使用顺序磁盘 I/O,这种方法提高了 Kafka 的性能,使其成为队列实施中的领导者选项,也是大数据用例的安全选择。

如果需要,请使用 Kafka

    时间旅行/持久/提交日志 同一条消息的许多消费者 高吞吐量 流处理 可复制性 高可用性 留言顺序

如果需要,请使用 RabbitMq:

    灵活的路由 优先队列 标准协议消息队列

For more info

【讨论】:

感谢 Avi 提供的信息。我的问题仅限于一个用例,即。微服务之间的通信。以电子商务应用为例。可能有订单服务、目录服务、支付服务。问题是,使用哪一个?为什么? @Pragmatic 我认为kafka会是更好的选择更好的性能,消费者订阅一个主题并开始从中提取消息,当一个主题被分区时,每个分区都有自己的消费者实例,我们将同一消费者的所有实例称为消费者组。 你可以创建所有微服务的主题,根据我的建议,很容易在此基础上处理它们。 @LukeBakken 我提供了我从中了解到的原始链接。如果我有什么问题,我很抱歉。如果您提供有关此主题的一些知识,这将非常有帮助。这将真的帮助我从像你这样的人的经验中学习。 :) @Avi 请看我的澄清here 另外,请看这个 - ***.com/a/42154452/1466825【参考方案2】:

为了选择消息代理,我认为这个列表会很有帮助。

Supported programming languages: 你可能应该选择一个支持 多种编程语言。

Supported messaging standards:消息代理是否支持任何标准, 比如 AMQP 和 STOMP,还是专有的?

Messaging order:消息代理是否保留消息的顺序?

Delivery guarantees: 经纪人提供什么样的交货保证?

Persistence:消息是否持久化到磁盘并且能够在代理崩溃后幸存下来?

Durability:如果消费者重新连接到消息代理,它会收到 断开连接时发送的消息?

Scalability:消息代理的可扩展性如何?

Latency:端到端延迟是多少?

Competing consumers:消息代理是否支持竞争消费者?

【讨论】:

以上是关于用于微服务的消息队列(如 RabbitMQ)或 Kafka?的主要内容,如果未能解决你的问题,请参考以下文章

微服务中使用MQ——RabbitMQ

微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)

微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式

微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)

微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式

Day428.RabbitMq消息队列--2 -谷粒商城