用于微服务的消息队列(如 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?的主要内容,如果未能解决你的问题,请参考以下文章
微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)
微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式
微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)