【Kafka】Kafka如何保证消息不丢失?

Kafka主要通过以下几个机制来保证消息不丢失:

1. 持久化消息

Kafka会将所有产生的消息持久化到磁盘上。默认情况下,数据会存放7天。
这样一旦broker重启,还可以读取之前的消息。

2. 复制机制

每个Partition都可以配置多个副本(Replica)。
当一个broker失败时,可以使用其它broker上的副本提供服务。

3. ISR(同步副本列表)

Kafka会不断监控副本broker的状态,将可用的broker列入ISR列表中。
只有ISR中的 broker才认为是有效的副本。

4. 重试机制

Producer提供了重试机制。
当一个broker宕机时,producer会自动重试发送消息给另外一个可用的broker。

5. 手动提交offset

消费者需要手动提交偏移量(offset),以防止由于crash造成的offset丢失。

6. 自动提交offset

Kafka也可以自动周期性提交offset,但是无法100%避免offset丢失。

综上可知

Kafka主要通过4种方式防止消息丢失:

  1. 持久化消息
  2. 复制消息
  3. 监控副本健康状态
  4. 生产者和消费者端的重试和 offset 提交机制

保证了即使发生各种故障,也能尽量减少消息丢失。但Kafka不能提供“0数据丢失”的保证。