将保存点添加到数据流

时间:2019-01-17 14:45:04

标签: java apache-flink flink-streaming flink-cep

我有一个kafka源,我的flink应用程序可以从中读取数据并进行处理,我想添加flink的savepoint机制,以便从上次保留的位置恢复该过程,而不是将savepoint添加到kafka源中,我想要应用程序以维护最后处理的流的状态,以便它不重新处理我的数据,而我的数据正在被我的应用程序部分处理。

我向kafka源添加了保存点,该源可以恢复kafka流,但是我想恢复已处理的数据流

 DataStream<String> streamOfStrings = env.addSource(new FlinkKafkaConsumer010<>(topicname));

我的字符串流进一步传递给另一个进程,该进程被转换为对象的数据流。我希望只保留已处理流的状态,而不要保留kafka流。有什么办法可以将保存点附加到数据流上

 DataStream<Object> streamOfObject = App.convertToObject(streamOfStrings);

1 个答案:

答案 0 :(得分:0)

一些澄清...

  1. 即使您保持下游状态,Kafka源也必须保持某种状态,以了解其消耗了多少主题。当您从检查点或保存点重新启动时,它必须重播最后一次进入保存状态的数据以及可用的当前数据之类的数据。
  2. 任何要保存的状态都需要有一定的持续时间(通常是时间限制),这样它才不会无限制地积累,对吗?

我能想到的最简单的方法是将App.convertToObject()方法转换为实现[ListCheckpointed][1]接口的适当函数。您将每个转换后的对象保存到列表中,但不超过一定限制(请参见同一页面上的BufferingSink示例)。