Apache Flink是否将所有添加功能的状态序列化到流中?即使在本地部署中?

时间:2018-07-07 07:02:50

标签: apache-flink

我正在为测试用例编写一些函数,这些函数被注入对对象的一些共享引用。假设像这样的int

SinkFunction

和测试代码:

class Collector[T](collection: ListBuffer[T]) extends SinkFunction[T] {
    override def invoke(in: T, context: SinkFunction.Context[_]): Unit = {
        collection.append(in)
    }
}

我运行了测试,但是测试结束val env = StreamExecutionEnvironment.getExecutionEnvironment val list = ListBuffer.empty[String] env.fromElements("Hello").addSink(new Collector(list)) env.execute() println(list) 还是空的! 我查看了文档(https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/testing.html),发现原始示例使用的是单例引用。

因此,我要确保Apache Flink在内部如何工作:即使在本地部署中,它也会将所有添加的功能序列化到流中吗?

1 个答案:

答案 0 :(得分:0)

是的,Flink序列化了所有功能。例如,如果您查看SinkFunction,就会发现它implements Serializable

如果要在作业和客户端(将作业发送到Flink的程序)之间共享数据,则必须使用文件,套接字,消息传递(RMQ,Kafka)或类似的机制自己进行管理。 / p>