我们是Apache Flink和Scala的新手。这是我们的用例,就像我们最初使用两种类型的主题播种AMPS服务器(crankuptheamps)中的数据一样。源#1&#2从主题#1&#2中提取数据。
用例
我们的要求是什么,但最初,源1将在源2开始之前播种(世界状况)数据。因为我们只是将源#1数据存储到Map State中。然后,只有我们需要启动源2母猪操作。最终,我们需要一个一个地运行源。因此,有没有可用的选项来逐一运行源代码。
def sourceConnect(environment: StreamExecutionEnvironment,topic: String, subscriptionType: SubscriptionType): DataStream[Map[String, String]] = {
val dataStream : DataStream[Map[String, String]] = environment.addSource(new RichSourceFunction[Map[String,String]]() {
var sourceClient: Client = null
override def open(parameters: Configuration): Unit = {
// .... Code Here
}
override def run(sourceContext: SourceFunction.SourceContext[Map[String, String]]): Unit = {
subscriptionType match {
case SubscriptionType.sow =>
//.... Code Here
}
}
override def getRuntimeContext: RuntimeContext = super.getRuntimeContext
override def cancel(): Unit = {
sourceClient.close()
}
override def close(): Unit = try cancel()
finally super.close()
})
dataStream }
private var environment: StreamExecutionEnvironment = null
// .... Code Here
val source1 = environment.addSource(....)
val source2 = environment.addSource(....)
val conn = source1.connect(source2)
conn.print()
environment.execute()
最终,我们的用例就像先运行source1和source2一样简单,这意味着进行同步
答案 0 :(得分:2)
在Flink中,没有一种特别奇妙的方式可以在开始从另一个流读取之前摄取一个流。这个一般主题通常称为外部输入,并且有一个FLIP(FLink改进建议)on this subject。
到目前为止,关于此主题的最佳资源是Lyft的Gregory Fee在Bootstrapping State In Apache Flink于Flink Forward San Francisco 2018上发表的演讲,探讨了几种可能的方法。哪个最好,取决于您的特定应用程序需求。
答案 1 :(得分:0)
我以前曾破解过一个UnionedSources SourceFunction
,让我先从一个来源发送所有数据,然后再从一个后续来源发送数据。我用它来引导一些状态。也许这会适合您的用例。
-肯