消息队列组件-kafka对比rabbitmq
- 吞吐量:kafka对比rabbitmq在处理大数据时表现更出色,吞吐量更高。
- 扩展性:kafka可通过增加服务器数量来实现水平扩展,而rabbitmq实现扩展的复杂性和成本更高(需要通过多节点集群或镜像队列来实现水平扩展)。
- 持久化:kafka的数据默认是持久化的(持久化消息到磁盘,并按时间策略自动清理),而rabbitmq默认是非持久化的(包括交换机、队列、消息),需要手动添加额外的配置实现持久化,例如设置durable=true 、deliveryMode=2。
- 易用性方面:rabbitmq对比kafka上手更加简单。kafka配置相对复杂(参数配置多,需要依赖其它组件,例如Zookeeper)。
- 实时性:rabbitmq对比kafka在消息传递时实时性方面表现更加优秀,而kafka在极端条件下会比rabbitmq延迟更高。
- 消息删除机制:rabbitmq消息被消费者正常消费并且显示确认(ACK)后会从队列中自动删除(手动确认情况下如果消费者未显示发送确认,则消息会重新放回队列中供其它消费者使用,自动确认情况下,消费者收到消息之后会立即删除消息),Kafka中的消息不会在消费后自动删除,而是仍然存储在分区中,根据主题的配置保留一段时间(默认是7天,若要修改时间,可修改servevr.properties文件里的log.retenion.hour参数,默认配置值是168,单位小时,即7天,也可以使用log.retenion.minutes 或者 log.retenion.ms 以分钟或毫秒为单位进行配置 )
总结:
选择rabbitmq的场景
- 要求消息传递实时性好。
- 业务要求强一致性,不允许消息丢失,例如订单状态变更、支付等。
- 系统规模比较小,数据量不大。需要上手简单。
选择kafka的场景
- 系统需要高吞吐量。
- 需要处理海量数据。
- 业务允许一些延迟(毫秒级)。
- 分布式架构。
人生如逆旅
我亦是行人

浙公网安备 33010602011771号