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)
相关推荐
starzy199011 小时前
KafkaProducer 加载元数据:一条 MetadataRequest 的完整旅程
大数据·kafka
PingCAP12 小时前
善战者无赫赫之功:消费金融核心系统的数据库选型与升级路径
数据库·分布式·架构
库库的数据库笔记13 小时前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构
RobinXYuan17 小时前
【Kafka 源码手记】04 客户端如何找到 Broker
kafka·源码阅读
爱吃火鸡面呀19 小时前
深入理解 Spark RDD:五大特性与实战解析
大数据·分布式·spark
Linux实战笔记20 小时前
记一次消息队列选型对比线上排查:Kafka/RabbitMQ/Pulsar 技术选型
kafka·rabbitmq·高并发·pulsar·消息队列选型
Norris Huang21 小时前
Kafka Connect 与 Flink CDC 写入 Iceberg:Upsert 的代价,以及 S3 Tables 的真正价值
分布式·flink·kafka
张彦峰ZYF21 小时前
一条消息的丢与重:Kafka 与 RabbitMQ 可靠投递的确认、位点、死信与幂等全链路
后端·kafka·消息队列·rabbitmq·isr·解耦与削峰·丢失与重复
我就是不信21 小时前
集群高并发环境下如何保证分布式唯一全局ID生成?
分布式
黄俊懿2 天前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构