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 小时前
Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证
spring boot·分布式·后端
Hello.Reader3 小时前
Kafka 实现从网络层到日志与位点的“全景拆解”
分布式·kafka
Hello.Reader4 小时前
Kafka 运维实战基本操作含命令与最佳实践
运维·kafka·linq
我是苏苏4 小时前
KafKa02:Kafka配置文件server.properties介绍
分布式·kafka
Dobby_054 小时前
【Hadoop】Yarn:Hadoop 生态的资源操作系统
大数据·hadoop·分布式·yarn
笨蛋少年派4 小时前
安装Hadoop中遇到的一些问题和解决
大数据·hadoop·分布式
虫小宝5 小时前
返利软件的分布式缓存架构:Redis集群在高并发场景下的优化策略
分布式·缓存·架构
在未来等你5 小时前
Kafka面试精讲 Day 18:磁盘IO与网络优化
大数据·分布式·面试·kafka·消息队列
lifallen5 小时前
字节跳动Redis变种Abase:无主多写架构如何解决高可用难题
数据结构·redis·分布式·算法·缓存