【发布时间】:2019-12-02 07:33:42
【问题描述】:
我有一个用例,我通过在 EMR 上运行的 flink 作业(使用 flink-kinesis 连接器)从 kinesis 流中消费事件。该作业接收事件,对其进行处理并将其接收到某个数据存储区。 通过处理,我的意思是应用一些转换(数据丰富)并进行聚合。我这里有几个问题:
如何在使用来自 kinesis 的事件时保持幂等性?我想只做一次处理,因为在聚合值时重复可能会给出错误的结果。我能想到的一种方法是在事件中维护一个主键。但为此,我需要存储处理过的值并每次执行查找,这可能会降低延迟。我该如何处理?有没有其他方法可以解决这个问题? (规模估计:我每天将有 500k-600k 事件进入直播)
对于数据丰富部分,我需要使用来自外部系统的数据。外部商店的最佳候选者和消费方式是什么?我想避免查找我正在处理的每个事件。
在某些情况下,我想重新处理某些事件。如果我通过主键保持幂等性,如何处理reprocess情况?
【问题讨论】:
-
我们在谈论什么样的重复??您的数据中有重复的事件,并希望确保您没有处理它们两次??因为 flink-kinesis 连接器提供了事件的一次性处理。
-
是的,以防生产者将重复事件放入流中
-
您对可能的重复有任何可能的限制吗? IE。重复消息可能会在原始消息之后的 2 秒内出现,还是完全随机的?
-
我们正试图限制时间。到目前为止,它是随机的
标签: apache-flink flink-streaming amazon-kinesis