文章

RocketMQ 是否会弄丢数据?

RocketMQ 是否会弄丢数据?

艿艿:注意,RocketMQ 是否会丢数据,主要取决于我们如何使用。这点,非常重要噢。

🦅 消费端弄丢了数据?

对于消费端,如果我们在使用 Push 模式的情况下,只有我们消费返回成功,才会异步定期更新消费进度到 Broker 上。

如果消费端异常崩溃,可能导致消费进度未更新到 Broker 上,那么无非是 Consumer 可能重复拉取到已经消费过的消息。关于这个,就需要消费端做好消费的幂等性。

🦅 Broker 弄丢了数据?

在上面的问题中,我们已经看到了 Broker 提供了两个特性:

  • 刷盘方式:同步刷盘、异步刷盘。
  • 复制方式:同步复制、异步复制。

如果要保证 Broker 数据最大化的不丢,需要在搭建 Broker 集群时,设置为同步刷盘、同步复制。当然,带来了可靠性,也会一定程度降低性能。

如果想要在可靠性和性能之间做一个平衡,可以选择同步复制,加主从 Broker 都是和异步刷盘。因为,刷盘比较消耗性能。

🦅 生产者会不会弄丢数据?

Producer 可以设置三次发送消息重试。

本文由作者按照 CC BY 4.0 进行授权