Python脚本消费多个Kafka topic
在Python中消费多个Kafka topic,可以使用kafka-python库,这是一个流行的Kafka客户端库。以下是一个详细的代码示例,展示如何创建一个Kafka消费者,并同时消费多个Kafka topic。
1.环境准备
(1)安装Kafka和Zookeeper:确保Kafka和Zookeeper已经安装并运行。
(2)安装kafka-python库:通过pip安装kafka-python库。
bash复制代码
pip install kafka-python
2.示例代码
以下是一个完整的Python脚本,展示了如何创建一个Kafka消费者并消费多个topic。
from kafka import KafkaConsumer
import json
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Kafka配置
bootstrap_servers = 'localhost:9092' # 替换为你的Kafka服务器地址
group_id = 'multi-topic-consumer-group'
topics = ['topic1', 'topic2', 'topic3'] # 替换为你要消费的topic
# 消费者配置
consumer_config = {
'bootstrap_servers': bootstrap_servers,
'group_id': group_id,
'auto_offset_reset': 'earliest', # 从最早的offset开始消费
'enable_auto_commit': True,
'auto_commit_interval_ms': 5000,
'value_deserializer': lambda x: json.loads(x.decode('utf-8')) # 假设消息是JSON格式
}
# 创建Kafka消费者
consumer = KafkaConsumer(**consumer_config)
# 订阅多个topic
consumer.subscribe(topics)
try:
# 无限循环,持续消费消息
while True:
for message in consumer:
topic = message.topic
partition = message.partition
offset = message.offset
key = message.key
value = message.value
# 打印消费到的消息
logger.info(f"Consumed message from topic: {topic}, partition: {partition}, offset: {offset}, key: {key}, value: {value}")
# 你可以在这里添加处理消息的逻辑
# process_message(topic, partition, offset, key, value)
except KeyboardInterrupt:
# 捕获Ctrl+C,优雅关闭消费者
logger.info("Caught KeyboardInterrupt, closing consumer.")
consumer.close()
except Exception as e:
# 捕获其他异常,记录日志并关闭消费者
logger.error(f"An error occurred: {e}", exc_info=True)
consumer.close()
3.代码解释
(1)日志配置:使用Python的logging模块配置日志,方便调试和记录消费过程中的信息。
(2)Kafka配置:设置Kafka服务器的地址、消费者组ID和要消费的topic列表。
(3)消费者配置:配置消费者参数,包括自动重置offset、自动提交offset的时间间隔和消息反序列化方式(这里假设消息是JSON格式)。
(4)创建消费者:使用配置创建Kafka消费者实例。
(5)订阅topic:通过consumer.subscribe方法订阅多个topic。
(6)消费消息:在无限循环中消费消息,并打印消息的详细信息(topic、partition、offset、key和value)。
(7)异常处理:捕获KeyboardInterrupt(Ctrl+C)以优雅地关闭消费者,并捕获其他异常并记录日志。
4.运行脚本
确保Kafka和Zookeeper正在运行,并且你已经在Kafka中创建了相应的topic(topic1、topic2、topic3)。然后运行脚本:
bash复制代码
python kafka_multi_topic_consumer.py
这个脚本将开始消费指定的topic,并在控制台上打印出每条消息的详细信息。你可以根据需要修改脚本中的处理逻辑,比如将消息存储到数据库或发送到其他服务。
5.参考价值和实际意义
这个示例代码展示了如何在Python中使用kafka-python库消费多个Kafka topic,适用于需要处理来自不同topic的数据流的场景。例如,在实时数据处理系统中,不同的topic可能代表不同类型的数据流,通过消费多个topic,可以实现数据的整合和处理。此外,该示例还展示了基本的异常处理和日志记录,有助于在生产环境中进行调试和监控。
Python脚本消费多个Kafka topic的更多相关文章
- 用canal同步binlog到kafka,spark streaming消费kafka topic乱码问题
canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有kafka和RocketMQ. 在投递的时候我们使用的是非压平的消 ...
- 获取kafka的lag, offset, logsize的shell和python脚本
python脚本 #!/usr/bin/env python import os import re import sys group_id=sys.argv[1] pn=sys.argv[2] ka ...
- Flume简介与使用(三)——Kafka Sink消费数据之Kafka安装
前面已经介绍了如何利用Thrift Source生产数据,今天介绍如何用Kafka Sink消费数据. 其实之前已经在Flume配置文件里设置了用Kafka Sink消费数据 agent1.sinks ...
- python 脚本查看微信把你删除的好友--win系统版
PS:目测由于微信改动,该脚本目前不起作用 下面截图来自原作者0x5e 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了.但群发消息不仅仅会把通讯录里面所 ...
- Kafka Topic Partition Replica Assignment实现原理及资源隔离方案
本文共分为三个部分: Kafka Topic创建方式 Kafka Topic Partitions Assignment实现原理 Kafka资源隔离方案 1. Kafka Topic创建方式 ...
- 记录一次坑爹的Python脚本抢购低价手机经历!
无意间浏览到魅族官网,说魅族3限量100台.30号中午12点抢购.正好我爪机目前处于报废状态,就来一试手气了.11点多种,习惯性的看了下网页脚本,发现了检测是否到抢购时间,并返回抢购消息的ajax.于 ...
- 手动删除Kafka Topic
一.删除Kafka topic 运行./bin/kafka-topics --delete --zookeeper [zookeeper server] --topic [topic name]: ...
- kafka topic制定规则
kafka topic的制定,我们要考虑的问题有很多,比如生产环境中用几备份.partition数目多少合适.用几台机器支撑数据量,这些方面如何去考量?笔者根据实际的维护经验,写一些思考,希望大家指正 ...
- kafka topic 完全删除
kafka topic 完全删除 1.自动删除脚本(得配置server.properties 中 delete.topic.enable=true) ./kafka-topics.sh --zoo ...
- kafka topic查看删除
1,查看kafka topic列表,使用--list参数 >bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list __consumer_of ...
随机推荐
- docker系列教程:docker图形化工具安装及docker系列教程总结
通过前面的学习,我们已经掌握了docker-compose容器编排及实战了.高级篇也算快完了.有没有相关,我们前面学习的时候,都是通过命令行来操作docker的,难道docker就没有图形化工具吗?答 ...
- kubernetes删除ns异常状态为:Terminating
在部署kuboard控制平台的时候,不规范删除,导致ns状态为Terminating [root@master01 ~]# kubectl delete namespace kuboard ^C ro ...
- 18 Python如何操作文件?
本篇是 Python 系列教程第 18 篇,更多内容敬请访问我的 Python 合集 1 打开文件 通常使用内置的 open(文件路径, 模式, encoding="utf-8") ...
- 【笔记】利用七牛云CDN加速提高前端图片静态资源访问速率
第一步,注册七牛云账号 打开 七牛开发者平台,选择 注册,注册后登录系统然后实名认证. 第二步,创建七牛云空间 七牛对象存储将数据文件以资源的形式上传到空间中.您可以创建一个或者多个空间,然后向每个空 ...
- 第15天:信息打点-主机架构&蜜罐识别&WAF识别&端口扫描&协议识别&服务安全
端口扫描:Nmap.Masscan.网络空间 开放状态:Close Open Filtered https://nmap.org/download.html https://github.com/ro ...
- 《Cloudera Hadoop大数据平台实战指南》代码下载
<Cloudera Hadoop大数据平台实战指南>代码下载 本书图书资源下载地址链接:https://pan.baidu.com/s/1-P7Go5gdJLim33_Iju1rfg 提取 ...
- 使用 Ant-Design-Vue 制作一个带图片上传功能的表单对话框
功能需求 使用 Antdv 的 Modal 组件内嵌一个 a-form 表单,具有添加数据和图片的功能. 页面结构设计 <template> <!--Modal--> < ...
- eBPF 概述:第 3 部分:软件开发生态
1. 前言 在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究.阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别 ...
- dotnet 委托delegate的使用 定义和使用
void Main() { // 委托 - 初级和高级的分水岭 // 1. 委托的初体验 // 委托是一个引用类型,其实是一个类型,保存方法的指针(地址) (变量名字都是地址 都是指针) // 是一个 ...
- 【技术分析】恶意 SPL 代币识别指南
背景 在 EVM 生态上,存在各式各样的 ERC20 代币,因其实现方式有着极高的自由度,也催生了花样繁多的恶意代币.这些恶意代币通常会在代码中实现一些恶意的逻辑(禁止用户卖出,特权铸造或销毁等),其 ...