如何与 Flink kinesis 消费者保持幂等性?



我有一个用例,其中,我通过 EMR 上运行的 flink 作业(使用 flink-kinesis 连接器(消耗来自 kinesis 流的事件。作业接收事件,对其进行处理并将其接收器到某个数据存储。 通过处理,我的意思是应用一些转换(数据扩充(并进行聚合。我在这里有几个问题:

  1. 如何在使用 kinesis 事件的同时保持幂等性?我想只做一次处理,因为在聚合值时重复可能会给出错误的结果。我能想到的一种方法是在事件中维护主键。但为此,我需要存储处理的值并每次执行查找,这可能会降低延迟。我该如何处理?还有其他方法可以解决这个问题吗?(规模估计:我每天将有 500k-600k 事件进入流(

  2. 对于数据扩充部分,我需要使用来自外部系统的数据。外部商店的最佳候选者及其消费方式是什么?我想避免查找我正在处理的每个事件。

  3. 在某些情况下,我可能需要重新处理某些事件。如果我通过主键维护幂等性,如何处理重新处理情况?

我希望这可以帮助您设置与检查点相关的配置。

val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)

最新更新