Kafka 的 Producer 有三种 ack 机制,参数值有 0、1 和 -1
- 0: 相当于异步操作,Producer 不需要 Leader 给予回复,发送完就认为成功,继续发送下一条(批)Message。此机制具有最低延迟,但是持久性可靠性也最差,当服务器发生故障时,很可能发生数据丢失。
- 1: Kafka 默认的设置。表示 Producer 要 Leader 确认已成功接收数据才发送下一条(批)Message。不过 Leader 宕机,Follower 尚未复制的情况下,数据就会丢失。此机制提供了较好的持久性和较低的延迟性。
- -1 / All: Leader 接收到消息之后,还必须要求 ISR 列表里跟 Leader 保持同步的那些 Follower 都确认消息已同步,Producer 才发送下一条(批)Message。此机制持久性可靠性最好,但延时性最差。
如果生产者发送了 5 条数据,但是只收到 4 条 ACK,会怎么样?
- 如果
acks=0,那么不会理睬。 - 如果
acks=1或者acks=all,会尝试重试。