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
相关推荐
xcLeigh2 小时前
Python入门:Python3基础练习题详解,从入门到熟练的 25 个实例(六)
开发语言·python·教程·python3·练习题
不懒不懒2 小时前
安装python3.9.7和pycharm-community-2022.3.2.exe以及linux
linux·ide·python·pycharm
烤麻辣烫3 小时前
I/O流 基础流
java·开发语言·学习·intellij-idea
Jasonakeke3 小时前
我的编程来时路
java·c++·python
我命由我123453 小时前
React - BrowserRouter 与 HashRouter、push 模式与 replace 模式、编程式导航、withRouter
开发语言·前端·javascript·react.js·前端框架·html·ecmascript
Yvonne爱编码3 小时前
Java 中的 hashCode () 与 equals () 核心原理、契约规范、重写实践与面试全解
java·开发语言·数据结构·python·hash
老虎06273 小时前
Java基础面试题(08)—Java(集合—HashMap的使用和实现原理红黑树)
java·开发语言
IT从业者张某某3 小时前
基于DEVC++实现一个控制台的赛车游戏-02-实现赛车游戏
开发语言·c++·游戏
半桶水专家3 小时前
Kafka 4.0.1 KRaft 模式完整部署指南
分布式·kafka·linq
HappyAcmen3 小时前
理解Python中的global与nonlocal
python