计算机系统应用教程网站

网站首页 > 技术文章 正文

MQ怎么确保不丢数据 mq防止数据丢失

btikc 2024-10-17 08:46:52 技术文章 6 ℃ 0 评论


MQ 从生产到消费会经历三个环节:

  1. 生产阶段:生产 -> MQ服务器
  2. 存储阶段:MQ 服务器存储
  3. 消费阶段:MQ -> 消费

JMQ 不丢失#

生产者发送消息过程中出现异常,业务程序应当重新发此条消息。 消费方处理异常后,JMQ 会重试消费。

RabbitMQ 不丢失#

生产者丢消息:

可以选择使用 RabbitMQ 提供的事务功能,就是生产者在发送数据之前开启事务,然后发送消息,如果消息没有成功被 RabbitMQ 接收到,那么生产者会受到异常报错,这时就可以回滚事务,尝试重新他发送;如果收到了消息,就可以提交事务。

缺点: 开启事务后,就会变成同步阻塞操作,生产者会阻塞等待是否发送成功,太耗性能会造成吞吐量的下降。

开启 confirm 模式,消息成功后会回传一个 ack 消息。

MQ 丢数据:

设置 queue 持久化。

消费者丢数据:

使用 RabbitMQ 的 ack 机制,首先关闭自动 ack,处理完成后代码里手动调用 ack。

Kafka 不丢失#

生产者丢消息:

设置 ack=all,要求 leader 收到消息后,所有 follower 都同步了消息之后,才认为本次写成功了。如果没有满足这个条件,生产者会自动不断重试,重试无限次。

MQ 服务丢数据:

设置 top 的副本参数,设置 acks=all,设置 retries=MAX

消费者丢消息:

关闭自动提交 offset,处理完成后手动提交 offset。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表