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,会尝试重试。