如何使用python在kafka中创建多个生产者和消费者

如何使用python在kafka中创建多个生产者和消费者,python,opencv,flask,apache-kafka,Python,Opencv,Flask,Apache Kafka,我正在尝试使用flask应用程序中的rtsp链接从多个网络摄像头捕获流,并希望通过浏览器显示。为了实现这一点,我创建了两个独立的生产者,主题和两个消费者。启动kafka服务器并同时运行consumer.py和producer.py后,这两个流仅运行两秒钟 我想从多个网络摄像头捕获流 producer.py 这是我的消费者。py 我的示例代码 ret, buffer = cv2.imencode('.jpg', frame) producer.send(topic, buffer.tobyte

我正在尝试使用flask应用程序中的rtsp链接从多个网络摄像头捕获流,并希望通过浏览器显示。为了实现这一点,我创建了两个独立的生产者,主题和两个消费者。启动kafka服务器并同时运行consumer.py和producer.py后,这两个流仅运行两秒钟

我想从多个网络摄像头捕获流

producer.py

这是我的消费者。py


我的示例代码

ret, buffer = cv2.imencode('.jpg', frame)

producer.send(topic, buffer.tobytes())


delete '[1]'

两分钟后停止工作会发生什么?如果它在
future.get()
调用中超时,我想知道您为什么要进行该调用,以便提出更好的替代方案。第一个摄影机流仅运行两秒钟,两秒钟后,第二个摄影机才启动。之后,制片人。py显示“文件”src/producer。py”,第29行,在emit_video data=cv2.imencode('.jpeg',frame)[1].tobytes()cv2.error:OpenCV(4.0.0)/io/OpenCV/modules/imgcodecs/src/grfmt_base.cpp:145:error:(-10:未知错误代码-10)原始图像编码器错误:函数“throwOnEror”中的空jpeg图像(不支持DNL)我可以使用同一端口9092使用consumer和consumer2吗?@ArifIbrahim
9092
是引导服务器的端口。有多个消费者连接到同一引导服务器是绝对好的。@Giorgosmyriantous非常感谢。现在我确认我的代码是好的。该问题是为使用RTSP链接而创建的。没有rtsp,代码运行良好。
from flask import Flask, Response,render_template
from kafka import KafkaConsumer

consumer = KafkaConsumer('my-topic', bootstrap_servers='localhost:9092')
consumer2 = KafkaConsumer('my-topic2', bootstrap_servers='localhost:9092')

app = Flask(__name__)


def kafkastream():
    for message in consumer:
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + message.value + b'\r\n\r\n')


def kafkastream2():
    print(threading.current_thread().getName())
    for message in consumer2:
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + message.value + b'\r\n\r\n')


@app.route('/video_feed')
def video_feed():
    return Response(kafkastream(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route('/video_feed2')
def video_feed2():
    return Response(kafkastream2(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)
data = cv2.imencode('.jpeg', frame)[1].tobytes()
ret, buffer = cv2.imencode('.jpg', frame)

producer.send(topic, buffer.tobytes())


delete '[1]'