分享

kafka和rabbitmq对比(超详细,从实战维度比较)

 吕志勇bozrp5jh 2020-08-07

kafka介绍

kafka是apache开源的消息队列顶级项目之一,在大数据场景下使用较多,由linkedin开源,目前社区活跃,全球较多组织开始使用kafka来进行数据交换。

rabbitmq介绍

RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。

kafka和rabbitmq全面对比分析

对比项 kafka rabbitmq
开发语言 scala,Java erlang
是否支持多租户 2.x.x支持多租户 支持多租户
是否支持topic优先级 不支持 支持
是否支持消息全局有序 不支持 支持
是否支持消息分区有序 支持 支持
是否内置监控 无内置监控 内置监控
是否支持多个生产者 一个topic支持多个生产者
是否支持多个消费者 一个topic支持多个消费者(一个消费者可消费多个分区,一个分区可被多个消费组消费,但同一消费组内仅能有一个消费者同时消费1个分区)
是否支持一个分区多个消费者 不支持 不支持
是否支持JMX 支持 不支持(非java语言编写)
是否支持加密 支持 支持
消息队列协议支持 仅支持自定义协议 支持AMQP、MQTT、STOMP协议
客户端语言支持 支持多语言客户端 支持多语言客户端
是否支持消息追踪 不支持消息追踪 支持消息追踪
是否支持消费者推模式 不支持消费者推模式 支持消费者推模式
是否支持消费者拉模式 支持消费者拉模式 支持消费者拉模式
是否支持广播消息 支持广播消息 支持广播消息
是否支持消息回溯 支持消息回溯,因为消息持久化,消息被消费后会记录offset和timstamp 不支持,消息确认被消费后,会被删除
是否支持消息数据持久化 支持消息数据持久 支持消息数据持久
是否支持消息堆积 支持消息堆积,并批量持久化到磁盘 支持阈值内的消息对接,无法支持较大的消息堆积
是否支持流量控制 支持控制用户和客户端流量 支持生产者的流量控制
是否支持事务性消息 支持 不支持
元数据管理 通过zookeeper进行管理 支持消息数据持久
默认服务端口 9092 5672
默认监控端口 kafka web console 9000;kafka manager 9000; 15672
网络开销 相对较小 相对较大
内存消耗 相对较小 相对较大
cpu消耗 相对较大 相对较小

实际场景选择

在实际生产应用中,通常会使用kafka作为消息传输的数据管道,rabbitmq作为交易数据作为数据传输管道,主要的取舍因素则是是否存在丢数据的可能;rabbitmq在金融场景中经常使用,具有较高的严谨性,数据丢失的可能性更小,同事具备更高的实时性;而kafka优势主要体现在吞吐量上,虽然可以通过策略实现数据不丢失,但从严谨性角度来讲,大不如rabbitmq;而且由于kafka保证每条消息最少送达一次,有较小的概率会出现数据重复发送的情况;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多