kafka 与 rabbitMQ 比较
所属分类 rabbitmq
浏览量 229
1.实际场景选择
RabbitMQ:交易数据,金融场景。具有较高的严谨性,数据丢失的可能性更小,同时具备更高的实时性;
kafka:高吞吐量,虽然可以通过策略实现数据不丢失,但从严谨性角度来讲,大不如rabbitmq;
2.应用场景方面
RabbitMQ:用于实时的,对可靠性要求较高的消息传递上。
kafka:用于处于活跃的流式数据,大数据量的数据处理上。
3.架构模型方面
RabbitMQ:以broker为中心,有消息的确认机制
kafka:以consumer为中心,无消息的确认机制
4.吞吐量比较
RabbitMQ:支持消息的可靠的传递,支持事务,不支持批量操作,基于存储的可靠性的要求存储可以采用内存或硬盘,吞吐量小。
kafka:内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,消息处理的效率高,吞吐量高。
5.集群负载均衡方面
RabbitMQ:本身不支持负载均衡,需要loadbalancer的支持
kafka:
采用zookeeper对集群中的broker,consumer进行管理,可以注册topic到zookeeper上,
通过zookeeper的协调机制,producer保存对应的topic的broker信息,可以随机或者轮询发送到broker上,
producer可以基于语义指定分片,消息发送到broker的某个分片上。
6.综合比较
RabbitMQ:
1.RabbitMQ的消息应当尽可能的小,并且只用来处理实时且要高可靠性的消息。
2.消费者和生产者的能力尽量对等,否则消息堆积会严重影响RabbitMQ的性能。
3.集群部署,使用热备,保证消息的可靠性。
kafka:
1.应当有一个非常好的运维监控系统,不单单要监控Kafka本身,还要监控Zookeeper。(kafka强烈的依赖于zookeeper,如果zookeeper挂掉了,那么Kafka也不行了)
2.对消息顺序不依赖,且不是那么实时的系统。
3.对消息丢失并不那么敏感的系统。
一般情况下,RabbitMQ 是更好的选择:
先进灵活的路由规则。
消息计时控制(控制消息过期或消息延迟)。
高级故障处理功能,以防消费者无法处理消息(暂时或永久)。
更简单的消费者实现。
以下场景,Kafka 是更好的选择
严格的消息排序。
消息保留较长时间,包括重放过去消息的可能性。
当传统解决方案无法满足对扩展性的需求时,Kafka 能够达到较高的规模。
功能项 Kafka(1.1.0版本) RabbitMQ(3.6.10版本)
优先级队列 不支持 支持。建议优先级大小设置在0-10之间。
延迟队列 不支持 支持
死信队列 不支持 支持
重试队列 不支持 不支持。RabbitMQ中可以参考延迟队列实现一个重试队列,二次封装比较简单。如果要在Kafka中实现重试队列,首先得实现延迟队列的功能,相对比较复杂。
消费模式 拉模式 推模式+拉模式
广播消费 支持。Kafka对于广播消费的支持相对而言更加正统。 支持,但力度较Kafka弱。
消息回溯 支持。Kafka支持按照offset和timestamp两种维度进行消息回溯。 不支持。RabbitMQ中消息一旦被确认消费就会被标记删除。
消息堆积 支持 支持。一般情况下,内存堆积达到特定阈值时会影响其性能,但这不是绝对的。如果考虑到吞吐这因素,Kafka的堆积效率比RabbitMQ总体上要高很多。
持久化 支持 支持
消息追踪
不支持。消息追踪可以通过外部系统来支持,但是支持粒度没有内置的细腻。
支持。RabbitMQ中可以采用Firehose或者rabbitmq_tracing插件实现。
不过开启rabbitmq_tracing插件件会大幅影响性能,不建议生产环境开启,反倒是可以使用Firehose与外部链路系统结合提供高细腻度的消息追踪支持。
消息过滤 客户端级别的支持 不支持。但是二次封装一下也非常简单。
多租户 支持 支持
多协议支持 只支持定义协议,目前几个主流版本间存在兼容性问题。 RabbitMQ本身就是AMQP协议的实现,同时支持MQTT、STOMP等协议。
跨语言支持 采用Scala和Java编写,支持多种语言的客户端。 采用Erlang编写,支持多种语言的客户端。
流量控制 支持client和user级别,通过主动设置可将流控作用于生产者或消费者。 RabbitMQ的流控基于Credit-Based算法,是内部被动触发的保护机制,作用于生产者层面。
消息顺序性
支持单分区(partition)级别的顺序性。
顺序性的条件比较苛刻,需要单线程发送、单线程消费并且不采用延迟队列、优先级队列等一些高级功能,从某种意义上来说不算支持顺序性。
安全机制 (TLS/SSL、SASL)身份认证和(读写)权限控制 与Kafka相似
幂等性 支持单个生产者单分区单会话的幂等性。 不支持
事务性消息 支持 支持
上一篇
下一篇
Prometheus offset 函数 计算同比环比
Prometheus sum 和 sum_over_time
PromQL内置函数
常用组件告警规则
flink-CDC-3.0 mysql to doris 数据同步任务 经常报错 stream load error: [LABEL_ALREADY_EXISTS]
promQL ON 使用