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中/或者直接消费不处理业务,后期重新补偿丢掉的数据