MST

星途 面试题库

面试题:消息队列Kafka开发中,事务消息的基本原理是什么?

在Kafka后端开发里,事务消息用于确保数据的一致性和完整性。请详细阐述Kafka事务消息的基本原理,包括涉及到的主要组件和机制。
36.4万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

基本原理

  1. 事务协调者(Transaction Coordinator,TC):每个Kafka集群都有一个或多个事务协调者,负责管理事务状态。生产者在开始事务前,会向事务协调者注册,并获取一个唯一的事务ID。
  2. 事务日志(Transaction Log):事务协调者使用事务日志记录事务的元数据,包括事务的开始、提交和中止状态等。这使得即使在节点故障后,事务状态也能被恢复。
  3. 生产者:生产者使用事务ID来标记一系列消息,表明这些消息属于同一个事务。在事务开启后,生产者发送的所有消息都不会立即被消费者看到,直到事务被提交。
  4. 消费者:消费者只有在事务提交后,才会看到属于该事务的消息。如果事务中止,这些消息永远不会被消费者看到。

主要组件

  1. Producer:负责开启、提交或中止事务,并发送属于事务的消息。它维护一个事务状态机,跟踪事务的当前状态。
  2. Transaction Coordinator (TC):管理事务元数据,包括事务的开始、进行和结束状态。TC还负责处理生产者的事务请求,并将事务状态持久化到事务日志中。
  3. Kafka Brokers:存储和管理消息。在事务处理过程中,Kafka brokers与事务协调者和生产者交互,确保消息的正确存储和可见性。

机制

  1. 事务开启:生产者通过向事务协调者发送InitPid请求,获取一个事务ID,从而开启一个事务。
  2. 消息发送:生产者使用获取到的事务ID标记要发送的消息。这些消息被发送到Kafka brokers,但处于未提交状态,消费者无法看到。
  3. 事务提交:生产者完成所有消息发送后,向事务协调者发送EndTxn请求,标记事务为提交状态。事务协调者将事务状态更新到事务日志,并通知Kafka brokers提交该事务的所有消息,使其对消费者可见。
  4. 事务中止:如果在事务进行过程中出现错误,生产者可以向事务协调者发送EndTxn请求,标记事务为中止状态。事务协调者将事务状态更新到事务日志,并通知Kafka brokers删除该事务的所有未提交消息。