Kafka:防止删除重新处理的过去事件

时间:2018-07-19 09:47:15

标签: apache-kafka apache-kafka-streams

我有一个events主题,拥有完全保留,因此我可以随时进行重新处理。我正在使用KafkaStreams处理此数据(包括会话)。有许多输出主题发送到数据库。

我有一个TimestampExtractor,它将Kafka记录的时间戳设置为原始事件的时间戳,以便对数据进行窗口化处理。

但是,在处理的输出主题中,我设置了长达数周的保留策略(因此,在使用它们后将其删除)。

如果我从原始主题重新处理此数据,则输出主题中生成的时间戳可能早于保留策略的阈值-因此可能会将它们标记为删除。

自从它们发布后,它们就有资格保留,我如何防止它们被删除?如何从数据处理中分离出用于数据保留的不同时间戳?在需要保留的输出主题上使用“挂钟时间”时间戳记是几乎是必需的

1 个答案:

答案 0 :(得分:0)

“正确”的解决方案是为输出主题设置更长的保留时间。如果下游应用程序使用此数据,则可能要使用“清除数据”请求(https://cwiki.apache.org/confluence/display/KAFKA/KIP-107%3A+Add+deleteRecordsBefore%28%29+API+in+AdminClient)手动删除旧数据。

作为替代方案,您可以仅操作输出记录的时间戳。您将需要升级到Kafka 2.0(即将发布):https://cwiki.apache.org/confluence/display/KAFKA/KIP-251%3A+Allow+timestamp+manipulation+in+Processor+API