kafka VS Rabbit

本文对比了Kafka和RabbitMQ的架构、适用场景和消息传递模式。Kafka以其高性能、持久化存储和流处理能力适合大规模流式处理和事件溯源,而RabbitMQ则因其通用性、多种协议支持和一致性保证适用于需要复杂路由逻辑的场景。两者在消息队列和发布/订阅模式上有不同实现,Kafka采用主题分区,RabbitMQ使用消息交换器。
摘要由CSDN通过智能技术生成

1. 前言

经历过多个基于微服务的场景,经常在问自己“到底是用Kafka还是Rabbit,二者之间该怎么选择,它们各有什么优点和缺点”。本文先从他们内部的消息传递模式说起。

2. 架构对比

2.1. Rabbitmq

RabbitMQ架构
RabbitMQ是一个通用的消息代理,通过包括点对点、请求/响应及发布订阅在内的多种消息通信模式。其采用的是一种智能代理/傻瓜消费的模式,侧重消息的持续投递与处理,并通过代理本身来维护消费者自身状态。RabbitMQ是一个设计成熟的消息代理中间件,支持包括Java, node.js, .NET, Ruby, PHP等在内的多种客户端,并且提供有多种插件来扩展自身功能。

RabbitMQ支持异步或者同步消息通信,生产者将消息发送到交换器中,消费者则从消息队列中获取消息。交换器将生产者从消息队列中解耦,避免了实际运用中消息路由的硬编码问题。RabbitMQ同时支持分布式部署,多个服务节点可以在完全不依赖外部其他服务(一些集群服务插件,比如:AWS APIs,DNS, Consul等等除外)的前提下组成一个服务集群。

2.2. Kafka

Kakka架构图
Kakfa是一个高吞吐量的发布订阅消息系统和流处理平台,类似于服务器集群中的日志系统,Kafka以主题的形式为消息流提供了持久消息存储。

Kafka中的每一个消息都包含一个键、值以及时间戳,与RabbitMQ相反,Kafka采用的是一种傻瓜代理/智能消费的模式,Kakfa只记录未读消息,相应的Kafka采取的是为所有的消息保留一定的时间窗口,同时,消费者负责各自记录自身读取消息的实际位置(.log)。因此,通过适合的客户端代码,Kafka可以以非常小的代价支持大量的消费者和数据。如图所示,Kafka本身需要借助外部服务(比如ZooKeeper)来实现相应功能。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值