kafka--基础知识点--5.3--producer事务

1 事务简介

Kafka事务是Apache Kafka在流处理场景中实现Exactly-Once语义的核心机制。它允许生产者在跨多个分区和主题的操作中,以原子性(Atomicity)的方式提交或回滚消息,确保数据处理的最终一致性。例如,在流处理中,消费者读取消息后处理并生成新消息,若处理失败,事务可确保原始消息的消费偏移与新消息的发送同时回滚,避免数据不一致。

事务的核心作用:

原子性: 跨分区的写操作要么全部成功,要么全部失败。

隔离性: 事务未提交时,消息对消费者不可见(通过isolation.level=read_committed配置实现)。

持久性: 事务状态持久化至内部Topic __transaction_state,支持故障恢复。

2 事务原理详解

了解即可
kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)------事务详解及代码实例)

3 示例

python 复制代码
from confluent_kafka import Producer, KafkaException
import time

# 配置生产者
conf = {
    'bootstrap.servers': 'localhost:9092',
    'transactional.id': 'my-transactional-id',  # 唯一事务ID
    'enable.idempotence': True,                 # 启用幂等性
    'acks': 'all',                              # 必须为all
    'retries': 5,                               # 必须启用重试
    'debug': 'txn'                              # 开启事务调试日志(可选)
}

# 创建事务生产者
producer = Producer(conf)

try:
    # 初始化事务(必须调用!)
    producer.init_transactions()

    # 开始事务
    producer.begin_transaction()

    try:
        # 发送消息(事务内)
        producer.produce(
            topic='my_topic',
            value=b'Message 1',
            key=b'key1'
        )
        producer.produce(
            topic='my_topic',
            value=b'Message 2',
            key=b'key2'
        )

        # 模拟业务逻辑(如数据库操作)
        # ...

        # 提交事务(消息对消费者可见)
        producer.commit_transaction()
        print("Transaction committed.")

    except Exception as e:
        # 回滚事务(丢弃未提交的消息)
        producer.abort_transaction()
        print(f"Transaction aborted: {e}")

except KafkaException as e:
    print(f"Failed to initialize transactions: {e}")

finally:
    # 关闭生产者
    producer.flush(timeout=10)
相关推荐
小白学大数据2 小时前
Scrapy 分布式爬虫:大规模采集汽车之家电车评论
开发语言·分布式·爬虫·scrapy
仗剑_走天涯3 小时前
hadoop reduce阶段 对象重用问题
大数据·hadoop·分布式
电磁脑机3 小时前
无总线场同步:意识本质、AGI困境与脑机革命的核心理论重构
分布式·神经网络·架构·信号处理·agi
半桶水专家4 小时前
kafka数据删除策略详解
分布式·kafka
一个有温度的技术博主4 小时前
Lua语法进阶:函数封装与条件控制的艺术
redis·分布式·缓存·lua
无心水4 小时前
2、5分钟上手|PyPDF2 快速提取PDF文本
java·linux·分布式·后端·python·架构·pdf
Jackyzhe4 小时前
从零学习Kafka:位移与高水位
分布式·学习·kafka
roman_日积跬步-终至千里4 小时前
【系统架构师-案例题-分布式数据缓存架构】22年下(3)分布式仓储货物管理系统
分布式·缓存·系统架构
鬼先生_sir4 小时前
SpringCloud-Stream + RocketMQ/Kafka
spring cloud·kafka·rocketmq·stream
indexsunny5 小时前
互联网大厂Java面试实战:从Spring Boot到微服务架构的技术问答
java·spring boot·redis·微服务·面试·kafka·spring security