kafka-python简单生产消费数据

kafka-python使用手册

kafka-python

1. 生产者同步发送数据

python 复制代码
# 生产者同步发送数据

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers=["192.168.1.6:9092"])

try:
    record_metadata = producer.send("predict_task_log", b"202312301505 predict res: success").get(timeout=10)   # 同步方式
    print(record_metadata.topic)
    print(record_metadata.partition)
    print(record_metadata.offset)
except KafkaError:
    print(f"write data to kafka failed!")
finally:
    producer.close()

2. 生产则异步发送数据

python 复制代码
# 生产者异步发送数据

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers=["192.168.1.6:9092"])

def on_send_success(record_metadata):
    """
    发送成功之后的回调函数
    """
    print(record_metadata.topic)
    print(record_metadata.partition)
    print(record_metadata.offset)

def on_send_error(excp):
    """
    发送失败后的回调函数
    """
    print(f"write data to kafka error: {excp}")

try:
    # 1. 主线程执行,子线程将数据写入缓冲池,不影响主线程做其他操作
    future = producer.send("predict_task_log", b"202312301505 predict res: success")
    # 2. 子线程通过回调函数通知主线程
    future.add_callback(on_send_success).add_errback(on_send_error)
except KafkaError:
    print(f"write data to kafka failed!")
finally:
    producer.close()

3. 消费者自动提交offset

python 复制代码
# 消费者自动提交offset

from kafka import KafkaConsumer

consumer = KafkaConsumer(
    bootstrap_servers=["192.168.1.6:9092"],
    group_id='predict_group',
    enable_auto_commit=True,        # 自动提交
    auto_commit_interval_ms=1000
)

for msg in consumer:
    topic, partition, offset = msg.topic, msg.partition, msg.offset
    key, value = msg.key, msg.value.decode("utf-8")
    print(f"从topic为{topic}的{partition}分区上,获取偏移量为{offset}的消息为{key}: {value}")

4. 消费者手动提交offset

python 复制代码
# 消费者手动提交offset

from kafka import KafkaConsumer

consumer = KafkaConsumer(
    bootstrap_servers=["192.168.1.6:9092"],
    group_id='predict_group',
    enable_auto_commit=False        # 手动提交
)

for msg in consumer:
    topic, partition, offset = msg.topic, msg.partition, msg.offset
    key, value = msg.key, msg.value.decode("utf-8")
    print(f"从topic为{topic}的{partition}分区上,获取偏移量为{offset}的消息为{key}: {value}")

    # 手动提交偏移量
    consumer.commit()           # 同步commit
    consumer.commit_async()     # 异步commit,推荐使用
相关推荐
AI殉道师几秒前
FastScheduler:让 Python 定时任务变得优雅简单
开发语言·python
indexsunny3 分钟前
互联网大厂Java面试实战:从Spring Boot到微服务架构的三轮提问
java·spring boot·微服务·eureka·kafka·mybatis·spring security
小二·11 分钟前
Python Web 开发进阶实战:AI 伦理审计平台 —— 在 Flask + Vue 中构建算法偏见检测与公平性评估系统
前端·人工智能·python
华研前沿标杆游学25 分钟前
2026年商汤科技参访深度解析人工智能发展
python
知数SEO26 分钟前
Centos如何安装高版本Python
linux·python·centos
试剂小课堂 Pro27 分钟前
mPEG-Silane:mPEG链单端接三乙氧基硅的亲水性硅烷偶联剂
java·c语言·网络·c++·python·tomcat
踏歌~36 分钟前
终极指南:在 Windows 上配置 KDB+, JupyterQ 与 Python (embedPy)
开发语言·windows·python
screenCui38 分钟前
算力市场JupyterLab简要使用命令
python
小二·1 小时前
Python Web 开发进阶实战:边缘智能网关 —— 在 Flask + MicroPython 中构建轻量级 IoT 边缘推理平台
前端·python·flask
喵手1 小时前
Python爬虫零基础入门【第六章:增量、去重、断点续爬·第2节】断点续爬:失败队列、重放、任务状态!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·增量、去重、断点续爬·断点续爬