Apache flink Flink中的全局变量
我想使用大小为2的FIFO队列来存储数据流的元素。在任何情况下,我都需要流中的前一个元素,而不是当前元素。为此,我在流代码之外创建了一个队列,并将当前元素加入队列。当我的队列有两个元素时,我将其出列并使用第一个元素 我面临的问题是,由于队列在流代码之外声明,因此无法将其排队。我猜这是因为流使用多个JVM,而我的队列将在一个JVM中声明 下面是一个示例代码:Apache flink Flink中的全局变量,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我想使用大小为2的FIFO队列来存储数据流的元素。在任何情况下,我都需要流中的前一个元素,而不是当前元素。为此,我在流代码之外创建了一个队列,并将当前元素加入队列。当我的队列有两个元素时,我将其出列并使用第一个元素 我面临的问题是,由于队列在流代码之外声明,因此无法将其排队。我猜这是因为流使用多个JVM,而我的队列将在一个JVM中声明 下面是一个示例代码: val queue = Queue[Array[Double]]() //Global Queue val ws = dataStream
val queue = Queue[Array[Double]]() //Global Queue
val ws = dataStream.map(row => {
queue.enqueue(row)
println(queue.size) //Prints 0 always
if(queue.size == 2){
result = operate(queue(0))
queue.dequeue
}
result
})
在这里,没有任何东西进入队列,队列大小始终为0。
有没有一种方法可以在Flink中创建分布在所有JVM中的全局变量?如果没有,是否有其他方法来实现此逻辑?令人惊讶的是,当我用Scala
List
替换Queue
时,它工作了 令人惊讶的是,当我用ScalaList
替换Queue
时,它起了作用 你的笔记:应该在正确的方向上。如何确保在多个TaskManager之间正确处理队列以及在出现故障时如何处理队列?您可能应该在一个状态下实现它……注意:应该朝着正确的方向。如何确保在多个TaskManager之间正确处理队列以及在出现故障时如何处理队列?您可能应该在一个状态下实现它……您确定这在分布式集群上可以工作吗?@enrico不确定。不再做这个项目了。。如果您有任何想法,请与我们分享。您确定这在分布式集群上有效吗?@enrico不确定。不再做这个项目了。。如果你有任何想法,请分享。