Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink Flink中的全局变量_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink Flink中的全局变量

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

我想使用大小为2的FIFO队列来存储数据流的元素。在任何情况下,我都需要流中的前一个元素,而不是当前元素。为此,我在流代码之外创建了一个队列,并将当前元素加入队列。当我的队列有两个元素时,我将其出列并使用第一个元素

我面临的问题是,由于队列在流代码之外声明,因此无法将其排队。我猜这是因为流使用多个JVM,而我的队列将在一个JVM中声明

下面是一个示例代码:

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
时,它工作了

令人惊讶的是,当我用Scala
List
替换
Queue
时,它起了作用

你的笔记:应该在正确的方向上。如何确保在多个TaskManager之间正确处理队列以及在出现故障时如何处理队列?您可能应该在一个状态下实现它……注意:应该朝着正确的方向。如何确保在多个TaskManager之间正确处理队列以及在出现故障时如何处理队列?您可能应该在一个状态下实现它……您确定这在分布式集群上可以工作吗?@enrico不确定。不再做这个项目了。。如果您有任何想法,请与我们分享。您确定这在分布式集群上有效吗?@enrico不确定。不再做这个项目了。。如果你有任何想法,请分享。