kafka python 性能_python – 作为实时kafka消费者的Flask API

我想构建一个使用Flask框架开发的python API,它使用Kafka主题并将流推送到客户端(html页面或其他应用程序).

我尝试使用虚拟数据生成实时流程(请参阅下面的实时路线).发生的问题是结果变量仅在循环结束后被推送,而结果变量应该在每次迭代时被推送.

我还尝试使用Kafka连接生成实时流(请参阅下面的kafka路线).问题是没有返回数据,而是请求没有完成.

from flask import Response, Flask

import time

from kafka import KafkaConsumer

application = Flask(__name__)

@application.route('/')

def index():

return "Hello, World!"

@application.route('/realtime/')

def realtime():

def createGenerator():

for i in range(1,10):

yield str(i) + '\n'

time.sleep(0.2)

return Response(createGenerator())

@application.route('/kafka/')

def kafkaStream():

consumer = KafkaConsumer(bootstrap_servers = 'serverlocation',

client_id = 'name of client',

auto_offset_reset = 'earliest',

value_deserializer = lambda m: json.loads(m.decode('ascii')))

consumer.subscribe(topics=['my-topic'])

def events():

result = []

for message in consumer:

if message is not None:

result.append(message.value)

yield result

return Response(events())

if __name__ == '__main__':

application.run(debug = True)

到目前为止,我有效地从Kafka接收数据的唯一方法是在控制台中打印结果.

from kafka import KafkaConsumer

consumer = KafkaConsumer(bootstrap_servers = 'serverlocation',

client_id = 'name of client',

auto_offset_reset = 'earliest',

value_deserializer = lambda m: json.loads(m.decode('ascii')))

consumer.subscribe(topics=['my-topic'])

for message in consumer:

print message

我认为问题是API在进程完成之前无法推送数据,并且因为KafkaConsumer连接是无限的,所以没有任何东西被推送到客户端.

我怎样才能克服这个问题?

解决方法:

既然我想了解更多相关信息,请花一些时间.经过4个小时的尝试,注意到:

def events():

result = []

for message in consumer:

if message is not None:

result.append(str(message.value)) # <--- here (str)

yield result

标签:python,flask,apache-kafka

来源: https://codeday.me/bug/20190710/1429126.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值