面试题答案
一键面试预提交阶段Kafka执行的操作
- 生产者发送半事务消息:生产者向Kafka的特定主题分区发送一条带有事务ID的半事务消息(也叫预提交消息)。此消息会被写入到Kafka的日志中,但在事务未完全提交或回滚前,该消息对消费者而言是不可见的。
- Broker响应确认:Kafka的Broker接收到半事务消息后,会持久化该消息到日志文件,并向生产者发送响应确认已成功接收消息。
目的
- 保证原子性:通过预提交阶段将消息先持久化但不暴露给消费者,确保后续事务提交或回滚操作可以作为一个原子性的整体。如果没有预提交阶段,直接将消息发送给消费者,在事务中途失败时,就无法保证消息的一致性。
- 为事务协调提供基础:预提交的消息等待事务的最终确认(提交或回滚),这样Kafka可以根据事务的状态来决定该消息最终是否对消费者可见,以此实现事务性语义,使得一组消息要么全部成功被消费,要么全部不被消费。