Kafka的消息保证有哪些模式?

Kafka 的消息提供了三种保证模式:

  1. At Most Once:消息可能会丢失,但绝不会重复发送。
  2. At Least Once:消息绝不会丢失,但可能会重复发送。
  3. Exactly Once:每条消息只会发送一次,即不会丢失也不会重复。

At Most Once 的实现机制是:

  1. 生产者发送消息后不等待Broker的ACK,直接发送下一条消息。
  2. 如果Broker在接收消息后发生故障,导致消息丢失,生产者不会重发。
  3. 消费者在消费消息后直接提交Offset,不等待消费结果的应答。
  4. 如果消费者在消费后提交Offset前发生故障,那么会导致某些消息被重复消费。

At Least Once 的实现机制是:

  1. 生产者发送消息后等待Broker的ACK确认,如果长时间未收到ACK会重发消息。
  2. 消费者在消费消息后提交Offset,如果提交失败会重复提交,直到成功。
  3. 如果消费者在消费消息后提交Offset前发生故障,那么会导致某些消息被重复消费。

Exactly Once 的实现机制是:

  1. 生产者发送消息后等待Broker的ACK确认,并且消息会写入磁盘后再发送ACK。如果生产者重启可以保证不重复发送消息。
  2. 消费者在消费消息后不直接提交Offset,而是发送消费确认给Broker。
  3. Broker在接收到消费确认后会将消息的Offset保存至磁盘,然后发送确认给消费者。
  4. 消费者在收到Broker的确认后会提交Offset,如果提交失败会重复此过程。
  5. 如果消费者发生故障可以根据已提交的Offset继续消费,不会重复消费消息。

理解 Kafka 的消息保证机制,可以让我们为不同的应用场景选择合适的保证模式。