【发布时间】:2020-03-01 12:59:54
【问题描述】:
我们正在启动一个新项目,我们正在评估用于微服务之间异步通信的技术堆栈?为此,我们正在考虑使用 RabbitMQ 和 Kafka。
任何人都可以阐明在这两者之间做出选择的关键考虑因素吗?
谢谢
【问题讨论】:
-
你试过脉冲星吗?似乎是一个更好的卡夫卡
标签: apache-kafka rabbitmq microservices
我们正在启动一个新项目,我们正在评估用于微服务之间异步通信的技术堆栈?为此,我们正在考虑使用 RabbitMQ 和 Kafka。
任何人都可以阐明在这两者之间做出选择的关键考虑因素吗?
谢谢
【问题讨论】:
标签: apache-kafka rabbitmq microservices
选择取决于您的微服务到底需要什么。与其他相比,两者都有不同的东西。
RabbitMQ简而言之
谁是玩家:
流程从 Publisher 开始,它发送消息到 Exchange,Exchange 是一个中间件层,知道将消息路由到队列,消费者可以定义他们从哪个队列消费(通过定义绑定),RabbitMQ 推送消息发送给消费者,一旦消费和确认到达,消息就会从队列中删除。 该系统中的任何部分都可以横向扩展:生产者、消费者以及 RabbitMQ 本身都可以集群化,并且具有高可用性。
卡夫卡
谁是玩家
Kafka 是一个强大的系统,并且在游戏中有多个成员。但是一旦你很好地理解了流程,这将变得易于管理和使用。 生产者向主题发送消息记录,主题是发布记录的类别或提要名称,可以对其进行分区,以获得更好的性能,消费者订阅主题并开始从中拉消息,当主题分区,然后每个分区都有自己的消费者实例,我们将同一消费者的所有实例称为消费者组。 在 Kafka 中,消息始终保留在主题中,即使它们已被使用(限制时间由保留策略定义) 此外,Kafka 使用顺序磁盘 I/O,这种方法提高了 Kafka 的性能,使其成为队列实施中的领导者选项,也是大数据用例的安全选择。
如果需要,请使用 Kafka
如果需要,请使用 RabbitMq:
【讨论】:
为了选择消息代理,我认为这个列表会很有帮助。
Supported programming languages: 你可能应该选择一个支持
多种编程语言。
Supported messaging standards:消息代理是否支持任何标准,
比如 AMQP 和 STOMP,还是专有的?
Messaging order:消息代理是否保留消息的顺序?
Delivery guarantees: 经纪人提供什么样的交货保证?
Persistence:消息是否持久化到磁盘并且能够在代理崩溃后幸存下来?
Durability:如果消费者重新连接到消息代理,它会收到
断开连接时发送的消息?
Scalability:消息代理的可扩展性如何?
Latency:端到端延迟是多少?
Competing consumers:消息代理是否支持竞争消费者?
【讨论】: