mq 面试题
2020-05-28 本文已影响0人
gstsyyb
一、mq的使用场景:
①、解耦 比如:订阅消息,异步处理逻辑
②、异步化处理 ,有些场景无需同步调用,可以通过消息队列异步处理
无需直接依赖 jar,其次失败可以重试
③、削锋做一个缓冲,然后一个个处理
大流量场景可以缓存处理请求
④、延迟队列
⑤、分布式事务
本地事物表 + 消息队列 (轮询补偿)
事务消息
二、开发中如何保证消息有序性
通常可以发送消息时,将其发送一个指定的分区,一般情况下消息都是局部有序的
三、发送者写入消息,如何保证可靠性
通常都是主数据和副本数据都写入成功,这种可保证数据不丢失,但性能一般,kafka 通过 ack 保证 leader 和 follower(副本节点) 都写入成功,rocketmq 写入时采用同步双写保证( 保证master 和 slave都写入成功)
四、为什么kafka 读取写入非常高效
1、批量写入、批量拉取
2、零拷贝(磁盘映射,无用户态和内核态切换)、顺序写
3、多路复用