Python脚本在IDE中运行,但不在终端中运行(Kafka)

2022-01-30 15:02:50 标签 pythonapache-kafkakafka-python

这可能与卡夫卡有关,也可能与卡夫卡无关,但我在学习卡夫卡时遇到了这个问题。我有一个Python制作人脚本,看起来像这样:

from kafka import KafkaProducer
from json import dumps
class Producer:
    def __init__(self):
        self.connection = KafkaProducer(
            bootstrap_servers=['localhost:9092'],
            value_serializer=lambda x: dumps(x).encode('utf-8')
        )
    def push_client(self, data):
        self.connection.send('client-pusher', value=data)
data = {
    "first_name": "Davey",
    "email": "davey@dave.com",
    "group_id": 3,
    "date": "2021-12-12"
}
producer = Producer()
producer.push_client(data)

我在Docker中运行Kafka Broker,消息在另一端被这个脚本消耗:

import json
from datetime import date
from typing import Optional
from kafka import KafkaConsumer
from pydantic import BaseModel
class Client(BaseModel):
    first_name: str
    email: str
    group_id: Optional[int] = None
    date: date
consumer = KafkaConsumer(
    'client-pusher',
    bootstrap_servers=['localhost:9092'],
    auto_offset_reset='earliest',
    enable_auto_commit=True,
    group_id='my-group-id',
    value_deserializer=lambda x: json.loads(x.decode('utf-8'))
)
while True:
    msg_pack = consumer.poll(timeout_ms=500)
    for tp, messages in msg_pack.items():
        for message in messages:
            client = Client(**message.value)
            print(client)

消费者脚本在无限循环中侦听新消息。我可以在终端或vscode中运行消费者,它总是会从生产者打印出数据字典,但只有当我在Visual Studio代码中运行生产者脚本。

如果我在终端运行生产者脚本

python producer.py

消息不会传递给消费者。没有运行时错误(生产者中的打印语句通过良好)。我无论如何也看不出IDE中的环境有什么不同。

我有不同的虚拟环境来管理这两个脚本。我已经尝试运行的生产者与venv的完整路径直接从vscode的终端复制的例子

/home/me/whatever/dummy-producer/.venv/bin/python producer.py

我还在sys中打印了所有内容。路径——它们在IDE和终端之间是相同的。

我还可以尝试找到vscode的执行和终端的不同?我用的是zsh。

Kafka客户端不会立即发送消息;如果你有少于默认的批处理大小和应用程序退出,你有效地删除事件。

如果你想立即发送,你需要在生产者中多一个方法

def push_client(self, data):
    self.connection.send('client-pusher', value=data)
    self.connection.flush()
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码