为了解决 FLINK-2491,我试图链接 SourceFunction
以便在第一个退出时不会受到伤害。基本思路如下:
class WrappingSourceFunction(innerSourceFunction: SourceFunction[Inner]) extends SourceFunction[Outer] {
override def run(outerCtx: SourceContext[Outer]): Unit = {
outerCtx.collect(...)
val innerCtx: SourceContext[Inner] = new SourceContextWrapper(outerCtx)
innerSourceFunction.run(innerCtx)
}
override def cancel() = innerSourceFunction.cancel()
}
可以在 run()
内调用不同 SourceFunction
的 run()
并实现我自己的 SourceContext
委托给另一个吗?它适用于在本地 Flink 环境中运行的小型测试,但我想知道在生产中这样做是否会出现任何问题。