【问题标题】:How to maintain idempotency with Flink kinesis consumer?如何与 Flink kinesis 消费者保持幂等性?
【发布时间】:2019-12-02 07:33:42
【问题描述】:

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

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

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

  3. 在某些情况下,我想重新处理某些事件。如果我通过主键保持幂等性,如何处理reprocess情况?

【问题讨论】:

  • 我们在谈论什么样的重复??您的数据中有重复的事件,并希望确保您没有处理它们两次??因为 flink-kinesis 连接器提供了事件的一次性处理。
  • 是的,以防生产者将重复事件放入流中
  • 您对可能的重复有任何可能的限制吗? IE。重复消息可能会在原始消息之后的 2 秒内出现,还是完全随机的?
  • 我们正试图限制时间。到目前为止,它是随机的

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


【解决方案1】:

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

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

【讨论】:

  • 希望对你有帮助。设置检查点相关的配置。
  • 即使生产者放置了两个不同的事件但具有相同的消息正文,这是否会有所帮助,因为这也是重复的?
  • 不知道你说的重复消费问题是指原消息有重复还是重复消费kinesis。如果源本身有重复的消息,这是不可能的;你必须弄清楚如何摆脱原来的重复消息。
猜你喜欢
  • 2010-12-12
  • 2020-06-23
  • 1970-01-01
  • 2017-08-18
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2019-05-19
相关资源
最近更新 更多