面试题答案
一键面试- acks参数取值及影响
- acks = 0:
- 可靠性:生产者发送消息后,不需要等待任何broker的确认。这意味着消息可能因为网络问题、broker故障等原因丢失,可靠性最低。
- 性能:由于不需要等待确认,生产者可以快速发送消息,性能最高。
- acks = 1:
- 可靠性:生产者发送消息后,只要分区的leader副本接收到消息并写入本地日志,就会向生产者发送确认。如果在leader副本将消息同步到其他副本之前leader发生故障,消息可能丢失,可靠性一般。
- 性能:因为需要等待leader的确认,性能比acks = 0稍低,但比acks = -1(或all)高。
- acks = -1 或 acks = all:
- 可靠性:生产者发送消息后,需要等待所有的ISR(In - Sync Replicas,与leader保持同步的副本集合)中的副本都确认接收到消息,才会认为消息发送成功。这保证了消息只要被成功发送就不会丢失,可靠性最高。
- 性能:由于需要等待所有ISR副本的确认,性能最低,因为等待时间取决于最慢的副本。
- acks = 0:
- 高可靠性且一定延迟容忍度场景的设置:在对消息可靠性要求极高但对延迟有一定容忍度的场景下,应设置
acks = -1
或acks = all
,以确保消息不会丢失。