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)
相关推荐
rchmin7 小时前
Distro与Raft协议对比分析
分布式·cap
小辉笔记7 小时前
kafka原理总结
分布式·kafka
实战项目7 小时前
分布式协作入侵检测系统的报警信息管理
分布式
无心水10 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
小北方城市网21 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
范桂飓1 天前
大模型分布式训练框架 Megatron-LM
人工智能·分布式
oMcLin1 天前
如何在Debian 11上通过配置MySQL 8.0的分布式架构,提升跨区域数据同步的效率与延迟?
分布式·mysql·debian
一条咸鱼_SaltyFish1 天前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
IT 行者1 天前
Spring Security 7 OAuth2 授权码分布式存储之Redis存储方案
redis·分布式·spring
潇凝子潇1 天前
kafka之监控告警
分布式·kafka