- 消息队列选型-√
- RocketMQ事务消息实现-※
- RocketMQ底层实现原理-※
- 消息队列如何保证可靠传输
- 消息队列的作用
- 死信队列和延时队列是什么
- 如何保证消息的高速读写
- 零拷贝是什么-※
kafka:
优点:吞吐量高,性能高
缺点:功能单一,有丢失消息的风险
rocketMQ:
优点:功能完善,性能好
缺点:客户端仅支持Java
可靠传输:不能多 不能少
1.消费者实现幂等性,哪怕多收消息,也能保证逻辑正常
2.关闭自动提交,收发消息都要收到ACK确认
本身独立: 各功能解耦
收发异步: 缓冲、削峰
下游能处理: 异步通信
下游不能处理:健壮性
死信队列:没有成功消费的消息,可以用于消息重试
延时队列:隔一段时间才发送消息,可以用于限时操作之类的判断
核心在于零拷贝
零拷贝的定义在于 一块区域的数据需要迁移的时候,不再需要拷贝至用户空间,而是直接在内核空间完成操作
核心在于两种方式:mmap transfile[DMA方式]
mmap:原本文件要拷贝至应用层,mmap则取消这个步骤,仅将数据映射引入到用户空间,数据本身不拷贝至用户空间
transfile[sendfile]:数据映射都不引入用户空间,直接使用DMA,将数据在内核之中,直接写入到socket缓冲区,缓冲区直接迁移至目标区域
两者区别:sendfile方式比mmap少了两次上下文切换