首页 > 解决方案 > 如何在 Google App Engine 中设置 Kafka 客户端

问题描述

我已经按照下面的谷歌教程进行操作,并且能够在我的谷歌应用引擎上运行它没有问题。

https://cloud.google.com/appengine/docs/standard/python3/building-app/writing-web-service

当我尝试将 kafka 客户端合并到 main.py 脚本中时,我只会遇到问题。主脚本如下,当所有对 kafka 的引用都被注释掉时,这个脚本在应用引擎中再次运行良好。

可以在应用引擎中使用 Kafka 吗?我尝试在 GCP 上同时使用内部和外部 kafka IP 地址,但没有成功......当我在同一目录中运行带有 requirements.txt app.yaml 和 main.py 的“gcloud app deploy”时(根据教程),或者甚至“python3 main.py”(用于测试)脚本挂起,没有错误消息它只是没有启动服务器。如果 Kafka 引用再次被删除,它运行良好。Kafka 在 GCP 项目中运行良好 - 可以从 ssh 终端正常发布和订阅。

当使用直接从 VM 运行的 Flask 应用程序在 Google Compute Engine 上运行时,我已经能够使这个 Kafka 设置工作 - (直接从 VM 运行而不使用 gcloud 终端)。这样做似乎可以让 kafka 使用内部 IP 地址,并避免 Kafka 似乎不喜欢的外部 IP 地址和跨网络困难的任何问题。

请帮忙!!(这是我有史以来的第一个 SOF 问题 - 所以要友善并非常具有描述性:))

from flask import Flask, render_template, Response
from pykafka import KafkaClient
from pykafka.common import OffsetType

clientKafka = KafkaClient(hosts='10.128.0.3:9092')

app = Flask(__name__)

topick = clientKafka.topics['gps_new']
producer = topick.get_sync_producer()


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

@app.route('/topic/gps_new/')
def get_messages():\
    def events():
        for i in 
 clientKafka.topics["gps_new"].get_simple_consumer(auto_offset_reset=OffsetType.LATEST,reset_offset_on_start=True):
            yield 'data:{0}\n\n'.format(i.value.decode())
    return Response(events(), mimetype='text/event-stream')

if __name__ == '__main__':
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    # Flask's development server will automatically serve static files in
    # the "static" directory. See:
    # http://flask.pocoo.org/docs/1.0/quickstart/#static-files. Once deployed,
    # App Engine itself will serve those files as configured in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

标签: pythongoogle-app-engineflaskapache-kafka

解决方案


推荐阅读