1. kafka/rabbitMQ/rocketMQ的优缺点
kafka
优点: 高吞吐量属于顶级 10w/s
高可用集群
性能高
通过配置可以消息0丢失
缺点:
功能比较单一 只有推和拉 不适用复杂的业务场景
rabbitMQ
优点: 可以保证数据不丢失
高可用
高级功能,死信队列 消息重试等
劣势:
吞吐量低 一秒几万
维护比较困难,需要线性扩展比较麻烦
erlang写的不好个性优化
rocketMQ
优点: 一秒十万的qps
高可用大规模部署
通过配置可以保证数据绝对不丢失
高级功能比较多,比如 延迟消费 事务消息
缺点: 要有能力自己维护rocketmq
2. mq的作用
异步
削峰
解耦
3. 使用mq会随之而来产生的问题?
1. 可用性降低
2. 复杂性增加
3. 一致性受影响
4. 如何保证消息队列的高可用
rabbitmq
普通集群模式没有高可用可言 只有一个节点有一份数据
镜像集群模式 每个节点都有queue镜像数据
kafka
主从替换 读主写主
5. 消费到重复的数据?
rocketmq/kafka 都是offset更新问题导致重复消费
消费者pull 得不到回复会重新pull
如何保证接口的幂等性?
先查再插入
数据库设置唯一索引
状态机
6. 消息保证顺序
rabbitmq保证消息发送到同一个queue中由一个consumer消费
rocketmq 维护一个唯一标识 传到同一个队列中 consumer根据id值hash到不同的内存队列中,然后用一个线程消费队列中的消息
7. 数据积压怎么办?
开启一个新的topic 拥有30个partition 旧的消费者把消息转发到新的topic中 等积压消息消费完 再转回旧的topic处理
开启了过期时间?
建议不开启,从数据源头从新导入
积压导致mq磁盘空间都快慢了?
消费者不消费转发消息到临时的mq中/或者直接消费不处理业务,后期重新补偿丢掉的数据