请解释 Kafka 如何实现事务消息?
考察说明
考察对 Kafka 事务消息实现机制的理解,包括事务协调、原子写入和幂等性保证。
回答思路
- 【回答框架 1】Kafka 事务消息的核心是跨分区原子性。生产者开启事务后,所有发送到不同分区的消息要么全部成功提交,要么全部失败回滚。它依赖于事务协调器(Transaction Coordinator)和事务日志(Transaction Log)来维护事务状态。
- 【回答框架 2】实现机制涉及生产者端的幂等性(Idempotence),通过 PID(Producer ID)和序列号去重,确保消息不重复。事务协调器负责分配 PID,并记录每个事务的状态,比如 BEGIN、COMMIT 或 ABORT。
- 【回答框架 3】事务提交时,协调器将事务标记为 COMMIT,并写入事务日志。然后,消费者在读取消息时,会通过事务标志来过滤未提交的消息,只有提交后的消息才对消费者可见。
- 【关键点 1】事务消息保证跨分区原子性,不是跨主题。
- 【关键点 2】实现依赖事务协调器、事务日志和生产者幂等性。
- 【关键点 3】消费者只能读取已提交事务的消息。
- 【易错点 1】事务消息不能保证跨会话的强一致性,需要配置控制器。
- 【易错点 2】启用事务会显著降低性能,不适合对延迟敏感的小消息。