ActiveMQ、RocketMQ、RabbitMQ、Kafka

特点:解耦、异步、削峰

特性 ActiveMQ RabbitMQ RocketMQ kafka
开发语言 java erlang java scala
单机吞吐量 万级 万级 10万级 10万级
时效性 ms级 us级 ms级 ms级以内
可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构)
功能特性 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 MQ功能比较完备,扩展性佳 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。

如何保证消息队列是高可用的?

以rcoketMQ为例,他的集群就有多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。

如何保证消息不被重复消费?= 如何保证消息队列的幂等性?

  1. RabbitMQ是发送一个ACK确认消息
  2. RocketMQ是返回一个CONSUME_SUCCESS成功标志
  3. kafka消费过消息后,需要提交offset,让消息队列知道自己已经消费过了
  4. 数据库唯一主键
  5. redis的set的操作
  6. 以redis为例,给消息分配一个全局id,只要消费过该消息,将以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录即可。

如何保证消费的可靠性传输?

三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据

如何保证消息的顺序性?

保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路。

你可能感兴趣的:(kafka,rabbitmq,java)