- acks一般常设置三种值
request.required.acks
= 0、1和-1(all)
- acks=0
- KafkaProducer把消息发送出去,不需要等待任何确认收到的消息,没有任何保障可以保证此种情况下server已经成功接收到数据,同时重试配置也不会发生作用(因为KafkaProducer并不知道此次发送是否失败)。
- 该情况,当数据已经发送出去,还在半路,此时leader挂了,但是producer还是认为消息发送成功了,这个时候就会导致这条消息丢失;
- 数据可靠性是最低的,传输效率也是最高的
- acks=1(默认)
- KafkaProducer把消息发送出去,至少要等待leader已经成功将数据写入本地log,但是并没有等待所有follower是否成功写入。该情况下,如果follower没有成功备份数据,而此时leader刚好又挂掉了,就会导致消息丢失
- acks=-1/all
- KafkaProducer把消息发送出去,这要求ISR列表离跟leader保持同步的那些follower都要吧消息同步过去,才能认为这条消息是写入成功的。
- 如果leader接受到数据了,但是follower还未同步数据,此时leader宕机了,那么producer会感知这个消息没有发送成功,会重试再次发送消息过去;此时