python cobnfluent kafka transaction事务

官网

事务 API(Transactional API)

事务生产者基于 幂等生产者(idempotent producer) 运行,并在与消费者隔离级别设置为 read_committed 时,为 Apache Kafka 提供完整的 Exactly-Once Semantics(EOS)。


Transactional Producer 操作原理

Transactional Producer 在幂等生产者之上提供全事务支持。

当与事务感知消费者(isolation.level=read_committed)一起使用时,它可以确保完全一次语义。


配置 Producer

通过设置 transactional.id 为在应用程序中唯一的标识符来启用 Producer 的事务支持。

该 ID 用于将来自先前实例的陈旧事务进行 fence(隔离),这通常会在故障或崩溃后发生。


阶段 API
初始化事务 producer.init_transactions()
开始事务 producer.begin_transaction()
生产消息 producer.produce(...)
提交 offset producer.send_offsets_to_transaction(...)
提交事务 producer.commit_transaction()
回滚事务 producer.abort_transaction()
  1. 生产者配置事务
python 复制代码
from confluent_kafka import Producer,Consumer
import json


class Transaction:
    
    def __init__(self) -> None:
        self.conf = {'bootstrap.servers': f'192.168.220.130:30500',"transactional.id":"12345"}
        self.produce = Producer(self.conf)

    def sendmessage(self):
        message = {"name":"4","age":100}
        
        self.produce.init_transactions()
        
        self.produce.begin_transaction()
        
        try:
            self.produce.produce("batchtopic",json.dumps(message))
            self.produce.commit_transaction()
        except:
            self.produce.abort_transaction()
  1. 消费者配置
python 复制代码
class TransactionConsumer:
    
    def __init__(self) -> None:
        self.conf = {
                    'bootstrap.servers': f'192.168.220.130:30500',
                    'isolation.level':'read_committed',
                    'group.id': "123",
                    'enable.auto.commit': False,
                    "heartbeat.interval.ms":3000,
                    'session.timeout.ms': 30000,
                    'max.poll.interval.ms':30000,
                    'auto.offset.reset': 'earliest',
                    'compression.type': 'gzip',
                    'message.max.bytes': 10485760
                    }
        self.consumer = Consumer(self.conf)

        self.consumer.subscribe(["batchtopic"])

    # consumer message from kafka and generate xml file 
    def consumerMessage(self):
        while 1:
            msg = self.consumer.poll(1)
            if msg == None:
                continue
            if not msg.error() is None:
                print (msg.error())
                continue

            else:
                try:
                    value = json.loads(msg.value())
                    print(value)
                except Exception as e:
                    print("error")
    def close(self):
        try:
            self.cons.close()
        except Exception as e:
            pass
相关推荐
东莞市云毅网络有限公司3 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
Sarvartha5 小时前
final 关键字
java·开发语言
数字融合5 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0115 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
程序员Sunday6 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
zhangzeyuaaa7 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
Marst Code7 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红7 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
谢亮_vipxieliang8 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
思无邪668 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能