1. mq的优缺点
优点:
缺点:
2. mq的选型
kafka:
rocketmq:
rabbitmq:
activemq:
3. 如何保证mq的高可用
rabbitmq:
单机模式,普通集群模式(中心化的),镜像集群模式(queue对等,实时性差,网络负载重,不可线性拓展)
kafka:
分布式架构,有多个broker(master,slave)。比如一个topic,数据不是分布在一台机器上,利于水平拓展。同时提供多副本机制保证高可用,针对一个topic下的副本,只能写入到leader,然后同步到follower。是中心化的。broker之间的协调是通过zk完成的,选出一个controller,然后决定每个partition的主从。
rocketmq:
分布式架构,有多个broker。和kafka不同,针对一个topic,在每个broker上会有多个queue,消息的消费是针对queue的,消息的冗余是通过主从复制,有同步复制和异步。broker的协调是通过nameserver来完成的,不同于kafka,rocketmq没有选举机制,因为broker对等,一个broker挂了则由其他的broker处理请求,相当于剔除了这个broker。
4. 如何保证消息的幂等性
产生重复消费的可能性:
保证幂等的手段:
5. 如何保证消息的可靠性
rocketmq
1>从producer的角度
2>从broker的角度
3>从consumer的角度
6. 如何保证消息的消费顺序
顺序消息包含两种类型:
分区顺序:一个partition内所有的消息按照先进先出的顺序进行发布和消费
全局顺序:一个topic内所有的消息按照先进先出的顺序进行发布和消费
rocketmq:我们知道针对一个topic是会有多个queue的,所以首先需要保证顺序消费的消息是发到同一个queue中的,通过提供的分区函数保证消息能够丢到一个queue中就好。 但是这样只能保证分区顺序,全局顺序的话那就是只有一个分区。
7. 消息队列里积压了很多消息怎么办
可以通过临时扩容,增加消费者数量,排查原先消费者出现的问题
如对本文有疑问, 点击进行留言回复!!
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论