我有一个 events
完全保留主题,以便随时重新处理。我正在使用kafkastreams来处理这些数据(包括会话)。有许多输出主题被发送到数据库。
我有一个timestampextractor,它将kafka记录的时间戳设置为原始事件的时间戳,以便在数据上执行窗口操作。
但是,在处理的输出主题中,我设置了长达数周的保留策略(因此在使用这些策略后会将其删除)。
如果重新处理原始主题中的数据,则输出主题中生成的时间戳可能早于保留策略的阈值,因此它们可能被标记为删除。
既然它们在发布时有资格保留,我如何防止它们被删除?如何区分数据保留和数据处理的不同时间戳?在需要保留的输出主题上使用“挂钟时间”时间戳几乎是强制性的吗?
1条答案
按热度按时间tzxcd3kk1#
“正确”的解决方案是为输出主题设置更高的保留时间。如果您的下游应用程序使用这些数据,您可能需要使用“清除数据”请求(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