架构
RocketMQ架构
topic下面是queue
queue分配在不同的broker上
kafka架构
RabbitMQ架构
主从
RocketMQ文件
Kafka文件
读写分离?
RocketMQ读写分离
kafka的follower只备份不提供读服务
消息防止丢失
RocketMQ防止消息丢失
Kafka防止消息丢失
RabbitMQ防丢失
- 客户端:
- ConfirmListener & returnListener
- 服务端(不能保证防丢失)
- 消息在正确存入RabbitMQ之后,还需要有一段时间(这个时间很短,但不可忽视)才能存入磁盘之中,RabbitMQ并不是为每条消息都做fsync的处理
- 消息什么时候刷到磁盘?
- 镜像模式可缓解
- RabbitMQ之消息持久化_朱小厮的博客-CSDN博客_rabbitmq持久化
- 消息在正确存入RabbitMQ之后,还需要有一段时间(这个时间很短,但不可忽视)才能存入磁盘之中,RabbitMQ并不是为每条消息都做fsync的处理
消费端
一个Queue对应一个Consumer,把需要保证顺序的message都发送到一个queue当中,关闭autoack,prefetchCount=1,每次只消费一个。
批量消费
kafka,批量消费要等最后的那个完成
- RocketMQ,可以返回RECONSUME_LATER:放入重试队列,然后继续消费后面的数据
MQ的IO优化
零拷贝kafka可以重置消费历史数据