如何访问从外部Flink作业计算的状态? (不知道它的id)

时间:2018-02-02 10:11:45

标签: apache-flink

我是Flink的新手,我正在测试一个用例的框架,该用例包括丰富来自Kafka的交易,具有许多历史特征(例如,相同来源和同一目标之间过去交易的数量),然后对此进行评分用机器学习模型进行交易。

目前,功能都保存在Flink状态,同样的工作是对丰富的事务进行评分。但我想将功能计算工作与评分工作分开,我不知道该怎么做。

  1. 可查询状态似乎不适合这个,因为需要工作ID,但告诉我我是不是错了!

  2. 我考虑过直接查询RocksDB,但也许有更简单的方法?

  3. 使用Flink,这项任务的两个工作分离是不是一个坏主意?我们这样做是为了与Kafka Streams进行相同的测试,以避免复杂的工作(并检查它是否对延迟产生任何积极影响)

  4. 一些额外的信息:我正在使用Flink 1.3(但如果需要则愿意升级)并且代码是用Scala编写的

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

像卡夫卡这样的东西适合这种脱钩。通过这种方式,您可以拥有一个计算功能的作业,并将它们转换为Kafka主题,该主题由执行评分的作业使用。 (旁白:这样可以很容易地做一些事情,比如运行几个不同的模型并比较它们的结果。)

有时使用的另一种方法是调用外部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