Kafka 的消费者通过以下机制处理数据丢失问题:
- 消息偏移量:消费者会在消费每条消息时记录消息的偏移量,偏移量指示了消费进度。通过定期提交偏移量,消费者可以在重新启动后从提交的偏移量开始消费,避免重复消费。
- 偏移量提交:消费者可以定时自动提交偏移量,也可以手动提交偏移量。自动提交可以 miniminze 消息重复消费的可能,而手动提交可以在成功处理消息后再提交,以避免消息丢失。
- 同步提交/异步提交:消费者可以同步提交偏移量,这会阻塞消费者等待服务器确认后再继续消费;也可以异步提交,立即继续消费而不等待服务器确认。同步提交可以保证提交成功,异步提交有数据丢失的风险。
- 回溯消费:如果消费者由于故障导致消息未消费,可以根据偏移量回溯消费未消费的消息。但是前提是提交的偏移量不能晚于实际消费的进度。
- 自定义提交策略:消费者允许自定义偏移量提交策略。可以根据应用场景选择自动定期提交、手动提交或者两者结合的方式,并指定提交同步还是异步,以实现自定义的消息丢失控制。
例如,消费者可以每消费 100 条消息自动同步提交偏移量。这样运行中断后只会重复消费最近 100 条消息,有效控制了消息丢失。
例如,消费者也可以每成功处理一批关键消息后手动同步提交偏移量。虽然定期自动提交可以最小化重复消费,但是对关键消息的处理成功与否无法保证,可能导致消息丢失。
理解消费者偏移量管理与提交策略,是设计一个健壮的消息消费方案的基础。