面试题答案
一键面试基本原理
- 事务协调者(Transaction Coordinator,TC):每个Kafka集群都有一个或多个事务协调者,负责管理事务状态。生产者在开始事务前,会向事务协调者注册,并获取一个唯一的事务ID。
- 事务日志(Transaction Log):事务协调者使用事务日志记录事务的元数据,包括事务的开始、提交和中止状态等。这使得即使在节点故障后,事务状态也能被恢复。
- 生产者:生产者使用事务ID来标记一系列消息,表明这些消息属于同一个事务。在事务开启后,生产者发送的所有消息都不会立即被消费者看到,直到事务被提交。
- 消费者:消费者只有在事务提交后,才会看到属于该事务的消息。如果事务中止,这些消息永远不会被消费者看到。
主要组件
- Producer:负责开启、提交或中止事务,并发送属于事务的消息。它维护一个事务状态机,跟踪事务的当前状态。
- Transaction Coordinator (TC):管理事务元数据,包括事务的开始、进行和结束状态。TC还负责处理生产者的事务请求,并将事务状态持久化到事务日志中。
- Kafka Brokers:存储和管理消息。在事务处理过程中,Kafka brokers与事务协调者和生产者交互,确保消息的正确存储和可见性。
机制
- 事务开启:生产者通过向事务协调者发送
InitPid
请求,获取一个事务ID,从而开启一个事务。 - 消息发送:生产者使用获取到的事务ID标记要发送的消息。这些消息被发送到Kafka brokers,但处于未提交状态,消费者无法看到。
- 事务提交:生产者完成所有消息发送后,向事务协调者发送
EndTxn
请求,标记事务为提交状态。事务协调者将事务状态更新到事务日志,并通知Kafka brokers提交该事务的所有消息,使其对消费者可见。 - 事务中止:如果在事务进行过程中出现错误,生产者可以向事务协调者发送
EndTxn
请求,标记事务为中止状态。事务协调者将事务状态更新到事务日志,并通知Kafka brokers删除该事务的所有未提交消息。