未命名

未命名

其实 kafka 事务主要是为了保证多条消息同时发送成功,

用在分布式事务上,感觉没有多大用处。
kafka 的事务的作用只是用于传递消息成功还是失败,同时,这个传递的过程是解耦的。而已。

我们可以在一个带有@transaction 注解的方法下同时修改数据库状态和发送 kafka 消息,这样,发送 kafka 消息报错的时候,我们可以回滚 kafka 消息,同时因为报错,把数据库也回滚了

除了上面提到的之外,kafka 还支持先消费再生产这种模式下的事务,保证生产成功了再进消费进度的提交。

. 事务性提交 Offset(Transactional Offsets)

Kafka 支持事务性提交,确保 消息处理和 offset 提交是原子操作,避免数据丢失或重复。

🔹 事务模式

📌 示例

producer.initTransactions();
while (true) {
    producer.beginTransaction();
    
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        producer.send(new ProducerRecord<>("output-topic", record.value()));
    }

    // 提交事务,同时提交 offset
    producer.sendOffsetsToTransaction(consumerOffsets, consumerGroup);
    producer.commitTransaction();
}

🔹 适用场景