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种方式防止消息丢失:
- 持久化消息
- 复制消息
- 监控副本健康状态
- 生产者和消费者端的重试和 offset 提交机制
保证了即使发生各种故障,也能尽量减少消息丢失。但Kafka不能提供“0数据丢失”的保证。