MST

星途 面试题库

面试题:消息队列Kafka中事务消息的预提交阶段主要做了什么

在Kafka事务消息实现机制里,事务消息有预提交阶段,请详细阐述这个阶段Kafka具体执行了哪些操作以及目的是什么。
20.9万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

预提交阶段Kafka执行的操作

  1. 生产者发送半事务消息:生产者向Kafka的特定主题分区发送一条带有事务ID的半事务消息(也叫预提交消息)。此消息会被写入到Kafka的日志中,但在事务未完全提交或回滚前,该消息对消费者而言是不可见的。
  2. Broker响应确认:Kafka的Broker接收到半事务消息后,会持久化该消息到日志文件,并向生产者发送响应确认已成功接收消息。

目的

  1. 保证原子性:通过预提交阶段将消息先持久化但不暴露给消费者,确保后续事务提交或回滚操作可以作为一个原子性的整体。如果没有预提交阶段,直接将消息发送给消费者,在事务中途失败时,就无法保证消息的一致性。
  2. 为事务协调提供基础:预提交的消息等待事务的最终确认(提交或回滚),这样Kafka可以根据事务的状态来决定该消息最终是否对消费者可见,以此实现事务性语义,使得一组消息要么全部成功被消费,要么全部不被消费。