Flink中的全局变量

时间:2016-08-30 10:06:34

标签: apache-flink flink-streaming

我想使用大小为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中?如果没有,有没有其他方法来实现这个逻辑?

1 个答案:

答案 0 :(得分:0)

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