Flink应用程序未接收和处理KINEis连接器关闭时生成的事件

时间:2018-05-02 12:54:54

标签: apache-flink flink-streaming amazon-kinesis

问题:Flink应用程序没有接收和处理KINEis连接器关闭时生成的事件(由于重启)

我们有以下Flink环境设置

env.enableCheckpointing(1000ms);
env.setStateBackend(new RocksDBStateBackend("file:///<filelocation>", true));
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(pause); 
env.getCheckpointConfig().setCheckpointTimeout(timeOut); 
env.getCheckpointConfig().setMaxConcurrentCheckpoints(concurrency);
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

和Kinesis有以下初始配置

kinesisConsumerConfig.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION,
                "LATEST");

当我更改Kinesis配置以回复事件,即

时,这是有趣的
 kinesisConsumerConfig.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION,
                "TRIM_HORIZON");

Flink正在从Kinesis接收所有缓冲记录(包括在事件Flink应用程序关闭之前,期间和之后生成的事件)并对其进行处理。因此,此行为违反了Flink应用程序的“Exactly once”属性。

有人能指出我遗漏的一些明显的事情吗?

1 个答案:

答案 0 :(得分:1)

Flink Kinesis连接器确实将分片序列号存储在状态中,以便进行一次处理。

根据您的描述,似乎在您的工作“重启”,检查点状态不受尊重​​。

首先消除明显的: 你的工作如何从重启中恢复? 您是从保存点恢复还是从上一个检查点自动重启?