文章目录
应用场景
- 异步处理:
- 应用解耦:
- 流量削峰:
- 应用解耦:
选型
- 吞吐量:ActiveMQ和RabbitMQ都是万级,RocketMQ和Kafka是十万级
- 时效性:Rabbit是微秒级,其他是毫秒级
- 可用性:ActiveMQ和RabbitMQ是主从架构,RocketMQ和Kafka是分布式架构
- 可靠性:ActiveMQ有较低概率丢失数据
- 功能支持:ActiveMQ功能完备,RabbitMQ基于erlang开发,并发能力强,延时低,RocketMQ分布式,扩展性好,Kafka功能简单,主要用于大数据领域
高可用
RabbitMQ
镜像集群模式
- 通过管理控制台新增镜像集群模式策略,可以指定数据同步到所有节点,再次创建queue时,自动将数据同步到其他节点
- 数据同步到所有节点需要性能开销
- 扩展性差
Kafka
afka 一个最基本的架构认识:由多个 broker 组成,每个 broker 是一个节点;你创建一个 topic,这个 topic 可以划分为多个 partition,每个 partition 可以存在于不同的 broker 上,每个 partition 就放一部分数据。
这就是天然的分布式消息队列,就是说一个 topic 的数据,是分散放在多个机器上的,每个机器就放一部分数据。
重复消费
- 消息消费成功,事务已经提交,ack时宕机,导致没有ack成功,broker的消息重新由unack变为ready,并发送给消费者
- 消息消费失败,重试机制自动又将消息发送出去
解决
- 接口幂等
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。