python生产消费Kafka

python生产消费Kafka主要是跟KafkaConsumer和KafkaProducer两个类打交道.

复制代码
from kafka import KafkaProducer, KafkaConsumer


class PythonKafka(object):
    def __init__(self, topic=None, username=None, password=None):
        self.topic = topic
        self.username = username
        self.password = password
        self.count = 0
        self.error_count = 0

    def on_send_success(self, *args, **kwargs):
        self.count = self.count + 1

    def on_send_error(self, *args, **kwargs):
        self.error_count = self.error_count + 1

    def get_kafka_producer(self):
        kafka_producer = KafkaProducer(bootstrap_servers=['ip1:port', 'ip2:port', 'ip3:port'],
                                       security_protocol='SASL_PLAINTEXT',
                                       sasl_mechanism='PLAIN',
                                       sasl_plain_username='username',
                                       sasl_plain_password='password',
                                       request_timeout_ms=40000,
                                       api_version=(0, 10, 1))
        return kafka_producer

    def get_kafka_consumer(self):
        # 指定超时时间,不然会一直阻塞
        consumer_params = {
            'security_protocol': 'SASL_PLAINTEXT',
            'sasl_mechanism': 'PLAIN',
            'group_id': 'test_group2',
            'sasl_plain_username': 'username',
            'sasl_plain_password': 'password',
            'auto_offset_reset': 'earliest',
            'api_version': (0, 10),
            'consumer_timeout_ms': 10000
        }

        return KafkaConsumer(self.topic,
                             bootstrap_servers=['ip1:port', 'ip2:port', 'ip3:port'],
                             **consumer_params)

    # 异步发送
    def send_data(self, json_str):
        json_bytes = str.encode(json_str)
        producer = self.get_kafka_producer()
        producer.send(self.topic, value=json_bytes).add_callback(self.on_send_success).add_errback(
            self.on_send_error)
        producer.flush()
        producer.close()

    # 接收数据
    def receive_data(self):
        consumer = self.get_kafka_consumer()
        for msg in consumer:
            msg_str = str(msg.value, encoding='utf8')
            print(msg_str)
        consumer.close()
复制代码

 

posted @   Mars.wang  阅读(1110)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示