Kafka流的最佳实践

4
我们有一个用Python编写的预测服务,提供机器学习服务,你可以向它发送一组数据,它会进行异常检测或预测等操作。
我想使用Kafka Streams来处理实时数据。
有两种选择:
1. Kafka Streams作业仅完成ETL功能:加载数据,进行简单转换并将数据保存到Elastic Search。然后定期启动计时器从ES中加载数据,并调用预测服务进行计算,并将结果保存回ES。 2. Kafka Streams作业除了ETL之外,还完成所有其他任务。当Kafka Streams作业完成ETL后,将数据发送到预测服务,并将计算结果保存到Kafka中,消费者将从Kafka中转发结果到ES。
我认为第二种方式更实时,但我不知道在流作业中执行这么多的预测任务是否是一个好主意。
对于这样的应用程序,是否有任何常见模式或建议?

1
可能想要查看 http://www.kai-waehner.de/blog/2017/09/07/apache-kafka-streams-h2o-tensorflow-live-demo-video-recording/ - OneCricketeer
1个回答

2

我也会选择第二个选项。你可以使用Kafka作为数据管道,在你的ML-Training模块和Prediction模块之间传递数据。这些模块可以很好地在Kafka Streams中实现。

请看下面的图表:

Machine Learning pipeline on top of Apache Kafka


现在我不在线训练数据了,模型是离线训练的,并且直接用于在线环境中。我使用joblib保存模型。 - shangyin
1
@leshkin 感谢您的回复,在您的图表中,Kafka流仅从Kafka读取数据,但在我的情况下,我的流需要调用另一个RESTful服务,甚至需要访问MySQL进行数据查询。这样可以吗? - NingLee
@NingLee 是的,您可以从Kafka Streams访问其他服务。 - codejitsu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接