Flask - 提取实时流kafka数据 - 将Kafka与Python Flask集成

时间:2016-02-05 07:32:39

标签: python flask socket.io flask-socketio kafka-python

此项目适用于real time search engine - log analysis表现。

我有从Spark处理到Kafka的实时流数据。

现在有了Kafka输出, 我想get the data from the Kafka using Flask ..和visualize it using Chartjs或其他一些可视化..

如何从Kafka using the python flask获取实时流数据?

我知道如何开始?

任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:1)

我会查看用于python的Kafka包:

http://kafka-python.readthedocs.org/en/master/usage.html

这应该让您设置从Kafka流式传输数据。另外,我可以查看这个项目:https://github.com/travel-intelligence/flasfka这与使用Flask和Kafka一起使用(只是在谷歌搜索中找到它)。

答案 1 :(得分:0)

我正在处理类似的问题(带有来自Kafka的实时流数据的小型Flask应用)。

你需要做几件事来设置它。首先,您需要KafkaConsumer来抓取消息:

from kafka import KafkaConsumer
consumer = KafkaConsumer(group_id='groupid', boostrap_servers=kafkakserver)
consumer.subscribe(topics=['topicid'])

try:
    # this method should auto-commit offsets as you consume them.
    # If it doesn't, turn on logging.DEBUG to see why it gets turned off.
    # Not assigning a group_id can be one cause
    for msg in consumer:
        # TODO: process the kafka messages.
finally:
    # Always close your producers/consumers when you're done
    consumer.close()

这是关于最基本的KafkaConsumer。 for循环阻塞线程并循环,直到它提交了最后一条消息。还有consumer.poll()方法可以在给定时间内获取您可以使用的消息,具体取决于您希望如何构建数据流。 Kafka的设计考虑了长期运行的消费者流程,但如果您正确地提交消息,您也可以根据需要打开和关闭消费者。

现在您拥有了数据,因此您可以使用Flask将其流式传输到浏览器。我不熟悉ChartJS,但是live streaming from Flask的核心是调用一个python函数,该函数在循环内以yield结尾,而不是在处理结束时只有return

在流媒体上查看Michael Grinberg's bloghis followup作为使用Flask进行流式传输的实际示例。 (注意:任何实际上在严肃的Web应用程序中流式传输视频的人都可能希望将其编码为视频编解码器,如使用ffmpy广泛使用的H.264并将其包装在MPEG-DASH中......或者可能选择更多的框架这个东西给你。)