我是Flink的新手,我正在测试一个用例的框架,该用例包括丰富来自Kafka的交易,具有许多历史特征(例如,相同来源和同一目标之间过去交易的数量),然后对此进行评分用机器学习模型进行交易。
目前,功能都保存在Flink状态,同样的工作是对丰富的事务进行评分。但我想将功能计算工作与评分工作分开,我不知道该怎么做。
可查询状态似乎不适合这个,因为需要工作ID,但告诉我我是不是错了!
我考虑过直接查询RocksDB,但也许有更简单的方法?
使用Flink,这项任务的两个工作分离是不是一个坏主意?我们这样做是为了与Kafka Streams进行相同的测试,以避免复杂的工作(并检查它是否对延迟产生任何积极影响)
一些额外的信息:我正在使用Flink 1.3(但如果需要则愿意升级)并且代码是用Scala编写的
提前感谢您的帮助!
答案 0 :(得分:3)
有时使用的另一种方法是调用外部API来进行评分。 Async I/O在这里可能会有所帮助。至少有几个小组正在使用流SQL来计算功能,并将外部模型评分服务包装为UDF。
如果您确实想使用可查询状态,可以use Flink's REST api to determine the job id。
Flink Forward会议上有几次关于在Flink使用机器学习模型的讨论。一个例子:Fast Data at ING – Building a Streaming Data Platform with Flink and Kafka。
社区正在努力使这一切变得更加容易。有关详细信息,请参阅FLIP-23 - Model Serving。