RebbitMQ的初步了解
消息队列有哪些作用
1 解藕:使用消息队列来作为两个系統的通讯方式,两个系统不需要相互依赖了 2.异步:系统A给消费队列发送完消息之后,就可以继续做其他事情了
3. 流量削峰:如果使用消息队列的方式来调用某个系統,那么消息将在队列中排队,有消费者自己控制消费速度
死信队列是什么?延时队列是什么?
- 死信队列也是一个消息队列,它是用来存放那些没有成功消费的消息的,通常可以用来作为消息重试
2.延时队列就是用来存放需要在指定时间被处理的元素的队列,通常可以用来处理一些具有过期性操作的业务,比如十分钟内 未支付则取消订单
Kafka为什么比RocketMQ的吞吐量要高
Kafka的生产者采用的是异步发送消息机制,当发送一条消息时,消息并没有发送到Broker而是缓存起来,然后直接向业务返回成 功,当缓存的消息达到一定数量时再批量发送给Broker。这种做法减少了网络io,从而提高了消息发送的吞吐量,但是如果消息 生产者宕机,会号致消息丢失,业务出错,所以理论上kafka利用此机制提高了性能却降低了可靠性。
如何保证消息的高效读写?
零拷贝:kafka和RocketMQ都是通过零拷贝技术来优化文件读写。
传统文件复制方式:需要对文件在内存中进行四次拷贝。
零拷贝:有两种方式,mmap和transfile (通过映射直接完成读写 减少两次拷贝)
Mmap 适合比较小的文件,通常文件大小不要超过1.5G ~2G之间。
Transfile没有文件大小限制。
RocketMQ当中使用Mmap方式来对他的文件进行读写。commitlog每次初始化空间1G
在kafka当中,他的index日志文件也是通过mmap的方式来读写的。在其他日志文件当中,并没有使用零拷贝的方式。
kafka使用transfile方式将硬盘数据加载到网卡。