面试题-MQ
Posted e烽火
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题-MQ相关的知识,希望对你有一定的参考价值。
MQ篇
1.使用MQ的优缺点及使用场景
优点:
- 流量削峰填谷;
- 异步处理;
- 解耦-降低系统之间的耦合度。
缺点:
- 增加了系统的复杂度,可能产生消息丢失,重复消费的问题;
- 降低了系统的可用性,mq的故障会影响系统可用性;
场景: 日志采集,发布订阅等
2.消息队列如何保证可靠性传输
消息可靠传输有两层含义:不能多也不能少。这两种问题都会从生产者和消费者的角度去考虑:
- 针对于不能多的问题:生产者端一般不会产生多发,这个也不容易控制;消费者端要避免重复消费最稳妥的办法就是消费者实现幂等性,这个既能解决生产者多发的问题也能解决消费者重复消费的问题。
- 针对不能少的问题即消息不能丢失:生产者要确保消息到了broker并持久化了,比如rabbitmq的confirm机制以及kafka的ack机制。消费端要采取消费端ack机制,即消费者接收到消息确认无误之后给broker发送一个ack,broker接收到ack之后才删除消息。
3.RabbitMq死信队列的来源及处理
来源:
- 消息被拒绝并且requeue=false
- 消息过期
- 队列达到最大长度
处理:
- 丢弃,如果不是很重要,可以选择丢弃
- 记录入库进行业务分析和处理
- 由负责监听死信队列的应用程序进行处理
4.如何保证消费幂等性
首先mq因为网络的原因是无法保证消息不被重复消费的,需要由消费者自己控制。常见的做法是分配一个全局的消息ID然后基于Redis或数据库的唯一键
5.kafka高性能的原因
- 磁盘顺序读写,顺序读写能充分利用预读
- 零拷贝,磁盘文件->内核空间读取缓冲区->网卡接口->消费者进程
- 分段区+索引,kafka将消息分布式存储在segment中,又为分段后的数据文件建立了索引,提高了数据访问效率,同时也提高了数据操作的并行度
- 批量读写/批量压缩
- 直接操作pagecache而不是JVM
以上是关于面试题-MQ的主要内容,如果未能解决你的问题,请参考以下文章