在系统时间更改时进行流重新处理

时间:2019-06-11 10:03:04

标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api

我有一个带有多个(24)主题的kafka流应用程序(Kafka v1.1.0)。这些主题中的四个是源主题,其余是目标主题。他们似乎已经重新处理了将系统时间更改为先前日期的数据。我有默认的代理配置,即:

before_validation :validate_email, on: :create

...

def validate_email
  if (email_is_invalid)
    errors.add(:base, error_message)
    throw(:abort)
  end
end

我详细研究了以下链接以及答案中发布的子链接:

1)Kafka Stream reprocessing old messages on rebalancing

2)How does an offset expire for an Apache Kafka consumer group?

3)https://cwiki.apache.org/confluence/display/KAFKA/KIP-186%3A+Increase+offsets+retention+default+to+7+days

以下JIRA讨论也阐明了此问题:

https://issues.apache.org/jira/browse/KAFKA-3806

在阅读了这篇文章之后,我对流使用者可能重新处理数据的情况有了一个了解。

但是,使用上述默认配置(用于我的设置的默认配置),如果偏移量丢失,即auto.offset.reset = latest offsets.retention.minutes = 1440 #1 day log.retention.hours = 168 #7 days 已过期,则使用者将重新平衡并从最新的已提交偏移量开始(不会任何内容),任何新的传入数据都将按原样处理。在这种情况下,不应进行任何数据重新处理,因此不会重复。

但是,在系统时间更改的情况下,偏移可能会不一致,即,源主题的偏移可能有offsets.retention.minutes之后的更早日期的CommitTime以后的日期。在这种情况下,如果某个主题的流量较低,并且没有收到超过CommitTime的数据,则其偏移量将不再可用,而另一个流量较高的主题的偏移量将为offsets.retention.minutes主题。

在这种情况下,流使用者的行为如何?在这种情况下是否有重复的机会。我真的很困惑。任何帮助将不胜感激。

0 个答案:

没有答案