MST

星途 面试题库

面试题:消息队列 Kafka 架构中 Producer 生产消息流程里,acks 参数不同取值的含义及对消息可靠性和性能的影响是什么

在 Kafka 的 Producer 生产消息流程中,acks 参数有 0、1、-1(all)等取值。请详细阐述每个取值代表的含义,以及不同取值下消息的可靠性和性能分别会受到怎样的影响。
32.5万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

acks = 0

  • 含义:生产者发送消息后,不需要等待任何来自 broker 的确认,就继续发送下一条消息。
  • 对消息可靠性影响:消息可靠性最低。因为生产者不会等待 broker 的确认,所以无法得知消息是否真正被 broker 接收,一旦网络问题等导致消息丢失,生产者也无感知。
  • 对性能影响:性能最高。由于无需等待确认,生产者可以以最快的速度发送消息,减少了等待时间,提高了消息发送的吞吐量。

acks = 1

  • 含义:生产者发送消息后,只要 leader 副本成功接收消息,就会向生产者发送确认。
  • 对消息可靠性影响:消息可靠性相对较高。只要 leader 副本接收成功,消息就不会丢失,但如果 leader 副本在确认后,还未来得及将消息复制到其他副本就发生故障,消息可能丢失。
  • 对性能影响:性能适中。相比 acks = 0,需要等待 leader 副本的确认,增加了一定的等待时间,但相比 acks = -1,无需等待所有副本确认,所以性能损失不如 acks = -1 大。

acks = -1(all)

  • 含义:生产者发送消息后,需要等待所有的 in - sync replicas(ISR)中的副本都成功接收消息,才会收到 broker 的确认。
  • 对消息可靠性影响:消息可靠性最高。只有当所有 ISR 副本都成功接收消息,才会确认,即使 leader 副本故障,其他副本也能保证消息不丢失。
  • 对性能影响:性能最低。因为需要等待所有 ISR 副本的确认,网络延迟、副本数量等因素都会增加等待时间,从而降低了消息发送的吞吐量。