Kafka:防止删除重新处理的过去事件
Kafka: Preventing deletion of reprocessed past events
我有一个 events
主题完全保留,所以我可以随时重新处理。我正在使用 KafkaStreams 来处理这些数据(包括会话)。有很多输出主题被发送到数据库。
我有一个 TimestampExtractor,它将 Kafka 记录的时间戳设置为原始事件的时间戳,以便对数据执行窗口操作等。
但是,在处理的输出主题中,我设置了长达数周的保留策略(所以它们在被消费后被删除)。
如果我从原始主题重新处理这些数据,输出主题中生成的时间戳可能比保留策略的阈值更早 - 因此它们可能被标记为删除。
既然它们一经发布就有资格保留,我该如何防止它们被删除?如何将数据保留和数据处理的不同时间戳分开?是否几乎强制在要保留的输出主题上使用"wall clock time"时间戳?
"right" 解决方案是为输出主题设置更长的保留时间。如果您的下游应用程序使用此数据,您可能需要使用 "purge data" 请求 (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
我有一个 events
主题完全保留,所以我可以随时重新处理。我正在使用 KafkaStreams 来处理这些数据(包括会话)。有很多输出主题被发送到数据库。
我有一个 TimestampExtractor,它将 Kafka 记录的时间戳设置为原始事件的时间戳,以便对数据执行窗口操作等。
但是,在处理的输出主题中,我设置了长达数周的保留策略(所以它们在被消费后被删除)。
如果我从原始主题重新处理这些数据,输出主题中生成的时间戳可能比保留策略的阈值更早 - 因此它们可能被标记为删除。
既然它们一经发布就有资格保留,我该如何防止它们被删除?如何将数据保留和数据处理的不同时间戳分开?是否几乎强制在要保留的输出主题上使用"wall clock time"时间戳?
"right" 解决方案是为输出主题设置更长的保留时间。如果您的下游应用程序使用此数据,您可能需要使用 "purge data" 请求 (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