【HBZ分享】MQ如何保证消息不丢失?

消息丢失的产生原因

  1. 生产端丢失: 网络故障,发送消息失败
  2. 服务器端丢失: 消息持久化执之前,服务器宕机
  3. 消费端丢失:消息处理完成前,服务异常,自动提交offset

避免消息丢失从哪方面进行防御?

  1. 生产者producer端
  2. 服务器broker端
  3. 消费者consumer端

生产者producer端如何保证消息不丢失?

Rabbitmq:

  1. rabbitmq有两个Callback函数,分别是【生产者–>Exchange】【Exchange–>队列】,通过回调函数来保证消息投递到交换机与队列中
  2. 确保消息发送成功后,并成功刷到磁盘保存,则可以确保不丢失

Kafka:

  1. 通过ACK机制: ACK = 0 ,1, all
    ack = 0 : 只要消息发送成功,则返回成功
    ack = 1 : 消息发送成功,并且Leader成功落盘,则返回成功
    ack = 2 : 消息发送成功,并且Leader 与 Follow同时成功落盘,则返回成功

Kafka 与 Rabbitmq都需要做的:

  1. 做好消息发送日志,记录关键字段,【投递时间, 投递状态, 重试次数, 请求体, 响应体】等。

服务器broker端如何保证消息不丢失?

  1. 做集群处理,确保某个服务器宕机不会影响
  2. 做异地容灾,同城容灾,两地三中心等
  3. 同步双写, 异步刷盘。
    同步双写 = 即master 与 slave都已经同步到内存,然后返回成功。
    异步刷盘 = 所有节点落盘是异步的,当然如果为了绝对安全,可以同步刷盘,但会损失性能

消费者consumer端如何保证消息不丢失?

  1. 做好日志采集,方便日后排查
  2. 通过ACK机制,kafka与rabbitmq都是通过ack机制的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值