博客
关于我
python使用kafka收发消息
阅读量:636 次
发布时间:2019-03-15

本文共 2846 字,大约阅读时间需要 9 分钟。

Kafka消息队列入门:Python发布与订阅实践指南

Kafka简介

Kafka是一款流行的开源消息队列中间件,广泛应用于大数据处理、后端服务等领域。作为发布-订阅模式的核心组件,Kafka以其高效的分区机制和可扩展性,成为现代应用的重要数据通信工具。本文将从基础到实践,向您展示如何使用Python与Kafka进行消息发布与订阅操作。

Kafka消息发布

安装依赖

首先,安装Python的Kafka连接模块:

pip install kafka-python

消息生产代码

以下是实现Kafka消息发布的Python代码示例:

import timefrom kafka import KafkaProducerclass KafkaMsgProducer:    def __init__(self, server):        self.server = server        self.producer = None    def connect(self):        if self.producer is None:            self.producer = KafkaProducer(bootstrap_servers=self.server)    def close(self):        if self.producer is not None:            self.producer.close()            self.producer = None    def send(self, topic, msg):        if self.producer is not None:            if not isinstance(msg, bytes):                msg = msg.encode("utf-8")            self.producer.send(topic=topic, value=msg)def run():    producer = KafkaMsgProducer("localhost:9092")    producer.connect()        topic = "YanChampion-Test"    print("开始向Kafka发送消息!")        for msg in "Hello! This is YanChampion speaking!".split():        producer.send(topic=topic, msg=msg)        time.sleep(1)if __name__ == "__main__":    run()

注意事项

  • 代码中使用bootstrap_servers配置项时,请确保Kafka服务器地址正确。
  • 消息体必须是bytes类型,代码中已提供了将str类型转换为bytes的处理方式。
  • 在实际使用中,建议为每个KafkaMsgProducer实例设置合理的brokering_servers参数。

Kafka消息订阅

消息消费代码

以下是实现Kafka消息订阅的Python代码示例:

import timefrom kafka import KafkaConsumerclass KafkaMsgConsumer:    def __init__(self, server, group_id):        self.server = server        self.group_id = group_id        self.consumer = None    def connect(self):        if self.consumer is None:            self.consumer = KafkaConsumer(                bootstrap_servers=self.server,                group_id=self.group_id            )    def close(self):        if self.consumer is not None:            self.consumer.close()            self.consumer = None    def consume(self, topic):        if self.consumer is not None:            for msg in self.consumer.consume():                if msg is not None:                    print(f"接收到消息:{msg.value.decode('utf-8')}")                    time.sleep(0.1)def run():    consumer = KafkaMsgConsumer("localhost:9092", "yanchampion-group")    consumer.connect()        topic = "YanChampion-Test"    print("开始监听Kafka消息...")        while True:        consumer.consume(topic)if __name__ == "__main__":    run()

消息订阅注意事项

  • group_id可根据实际需求进行设置,确保每个消费者组有唯一的group_id
  • 消费者会持续监听消息,使用time.sleep(0.1)控制消费频率。
  • 消息消费成功后,会打印消息内容,用户可以根据实际需求进行处理。

测试与验证

消息生产与消费验证

  • 打开终端1,运行以下命令:
python3 consumer.py
  • 打开终端2,运行以下命令:
python3 producer.py
  • 消息将通过Kafka进行分发,消费者终端会接收到每条消息。注意到消息会被自动分区处理,相同的消息可能会被多个消费者同时接收。

测试结果示例

消费者终端可能会显示如下输出:

接收到消息:b'111'接收到消息:b'222'接收到消息:b'333'接收到消息:b'444'

总结

通过以上代码示例,我们成功实现了Kafka的消息发布与订阅功能。Kafka的发布-订阅模式使得消息生产者与消费者之间的耦合度极低,适合处理大规模的异步数据通信场景。在实际应用中,可以根据具体需求调整消息分区数、消费者组大小等参数,以优化Kafka的性能表现。

转载地址:http://inplz.baihongyu.com/

你可能感兴趣的文章
Train Problem II(卡特兰数+大数乘除)
查看>>
一些技术博客
查看>>
第01问:MySQL 一次 insert 刷几次盘?
查看>>
分布式 | DBLE 3.20.07.0 来啦!
查看>>
振荡器指标
查看>>
libvirtd:内部错误:Failed to apply firewall rule
查看>>
优先级队列2
查看>>
简单易懂的背包问题
查看>>
属性的使用错误
查看>>
C#选定文件复制到指定文件夹
查看>>
ACM DP Partitioning by Palindromes
查看>>
TiKV 源码解析系列文章(十三)MVCC 数据读取
查看>>
TiDB 源码阅读系列文章(十六)INSERT 语句详解
查看>>
TBSSQL 的那些事 | TiDB Hackathon 2018 优秀项目分享
查看>>
【面试题】Java中创建对象的方式有几种?
查看>>
1900分图论 : 1183E1 LCA + Kruskal
查看>>
(建议收藏)计算机网络:传输层概述、UDP协议与可靠传输协议习题解析与拓展
查看>>
Android 开发常用的工具类(更新ing)
查看>>
Android HUAWEI 使用安装包安装App时系统提示:文件打开失败
查看>>
EasyUI的简单介绍
查看>>