面试题答案
一键面试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 副本的确认,网络延迟、副本数量等因素都会增加等待时间,从而降低了消息发送的吞吐量。