1、消息队列有什么作用?
(1)解耦:数据存在消息队列中,其他服务也可以拿到,做到服务解耦
(2)异步传输:数据是异步传输的,生产者将消息发送到队列后,就可以做其他事情了,提高系统的响应速度
(3)削峰:当数据量大时,消息先存在队列中,消费者按照自己的处理速度消费消息,保证系统性能稳定
2、消息队列有什么缺点?
(1)降低系统的可用性:如果消息队列挂了,消息就消费不到了
(2)增加系统的复杂性:加入消息队列,数据链路就增加了,系统也复杂了
(3)存在数据一致性问题:两个服务都消费数据,一个消费成功,一个消费失败,导致数据不一致
3、为什么选择Rocketmq?
(1)kafka吞吐量大,高可用,但是可能会丢数据;rabbitmq高可靠性,吞吐量低。Rocketmq高可用、高可靠而且吞吐量不低
(2)rocketmq有控制台可以查看数据生产和消费情况
(3)宇视的产品使用rocketmq用于存储相机的抓拍数据,其中包含了告警数据,不能丢失。考虑到以后的业务扩展,接入的数据会越来越多,所以吞吐量要提前考虑
(4)rocketmq源码和资料都方便阅读,便于问题定位
4、如何保证数据消费的幂等性?
在数据中可以设置一个唯一不可重复的字段,用于表示数据的唯一性。在生产和消费数据时都去比较这个字段。
5、如何保证消息的顺序?
(1)发送消息的时候,选择消息队列,如此一来一类消息放在同一个队列中
(2)消费消息的时候,使用顺序消息消费,如此一来一个队列只会有一个线程消费
6、如何保证数据一致性?
(1)在生产者端使用事务消息:生产者首先发给mq的是半消息,即消费者消费不到的消息。mq返回响应后,生产者执行本地事务,如果执行成功,会给mq发送事务提交的信息,半消息变成普通消息;否则,生产者会发送事务回滚的消息,半消息被删除。
(2)消费者端:消费者消费到消息后,执行本地事务,等本地事务执行成功后,在返回消费成功的响应。
7、Rocketmq的配置参数?
(1)消费者配置项:日志名称和路径、消费者组名称、节点的IP和端口、消费模式、是否顺序消费、消费者实例
(2)生产者配置项:日志名称和路径、生产者组名、生产者实例、节点的IP和端口
8、如何保证消息不丢失?
(1)发送消息使用同步发送,mq需要返回响应。并且设置失败重试机制
(2)消息刷盘设置成同步刷盘,这样消息存入磁盘后,mq才会返回成功响应
(3)为了防止磁盘损坏导致数据丢失,使用mq的主从集群部署,并且使用同步复制机制
9、Rocketmq有哪些部署方式?
(1)单节点部署,一个主节点
(2)多个主节点部署,大家都是master,没有数据备份
(3)多主多从同步复制方式部署,保证数据不丢失
(4)多主多从异步复制方式部署,响应速度比同步快些