RocketMq常见问题

如何保证消息不丢失?

产生丢失消息的节点主要有以下几点

  1. 生产者发到broker
  2. broker把消息从缓存写入磁盘
  3. broker同步到从节点
  4. 消费者消费消息
  5. 消息积压太多, 会删除历史消息, 这里不会校验消息有没有消费

解决:

  1. 生产者同步发送消息, 如果发送失败, 写重试逻辑, 如果重试多次还失败, 可以存到数据库, 定时任务重试
  2. 生产者发送事务消息, 保证本地事务和发送消息一致性, 间接达到消息不丢失
  3. broker先写入缓存, 如果缓存来不及写入磁盘, 可能造成消息丢失. 可以配置同步刷盘解决这个问题, 收到客户端一条消息马上写磁盘, 可能造成性能问题, rmq默认是10ms写一次
  4. Dledger主从架构保证MQ主从同步时不会丢消息.
    1. 采用两阶段方式, 主broker的DledgerServer收到消息后, 会先标记为uncommitted状态
    2. 然后主broker的DledgerServer把消息发送到从broker的DledgerServer组件
    3. 从broker的DledgerServer收到消息后会返回一个ack
    4. 主broker的DledgerServer收到半数以上的ack, 才会把uncommitted改成commited
  5. 消费者不要使用异步或者try catch, 固定返回SUCCESS.应该根据实际业务, 真的处理成功再返回成功, 如果消费失败, 消费者会自动重试

如何快速处理消息大量积压

  1. 如果消息不重要, 允许丢失, 可以在控制台直接跳过消息
  2. 增加消费节点. 注意: 一个messageQueue只能被一个消费者消费, 因此消费者不能超过messqgeQueue数量
  3. 转移Topic. 将消息转发到新的TOPIC, 新的TOPIC又会分配新的MessageQueue, 并行消费.
  4. 将消息存到数据库, 削峰, 开定时任务慢慢消费 

Rmq如何实现高性能

  1. 消息零拷贝
  2. 所有消息都写到commitlog, 顺序写
  3. 文件索引机制
  4. 推模式实时推送消息
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值