Kafka中的消息确认(Acknowledgment)是什么?有什么作用?

Kafka 中的消息确认(Acknowledgment)是指生产者发送消息后,等待 Kafka 返回的确认信息。消息确认用于保证消息发送的可靠性,主要有以下几种模式:

  • 1. 最速消息确认(Fire-and-Forget):生产者发送消息后立即返回确认,不等待 Broker 的确认。此模式吞吐量最高,但可靠性最低。
  • 2. 知识消息确认(Flush Ack):生产者发送消息后等待 Broker 落盘确认,再返回确认给生产者。此模式吞吐量较高,且保证消息不会丢失。
  • 3. 完成消息确认(Commit Ack):生产者发送消息后等待消息被提交后确认,再返回确认给生产者。此模式吞吐量较低,但可靠性最高。
  • 4. 等待ISR确认(WaitForIsr Ack):生产者发送消息后等待消息被复制到 ISR 集合内的副本数后确认,再返回确认给生产者。此模式吞吐量中等,且保证高可靠性。

以上模式中,完成消息确认模式可靠性最高但吞吐量较低。等待ISR确认模式在可靠性和吞吐量之间做了很好的平衡。知识消息确认模式吞吐量较高,且对大多数应用来说已经足够可靠。

例如,如果使用完成消息确认模式,生产者只有在消息被成功写入 Broker 和所有 Follower,并被消费者消费后才会收到确认。这保证了消息被完全处理,但会对生产者吞吐量产生影响。

如果使用等待ISR确认模式,生产者只有在消息被成功复制到 ISR 集合内的大多数副本后才会收到确认。这保证了高可靠性的同时较少影响吞吐量。