Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡:防止删除重新处理的过去事件_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 卡夫卡:防止删除重新处理的过去事件

Apache kafka 卡夫卡:防止删除重新处理的过去事件,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有一个完全保留的events主题,因此我可以随时重新处理。我正在使用KafkaStreams处理这些数据(包括会话)。有许多输出主题被发送到数据库 我有一个TimestampExtractor,它将Kafka记录的时间戳设置为原始事件的时间戳,以便在数据上执行窗口操作 但是,在处理的输出主题中,我设置了长达数周的保留策略(因此在使用这些策略后会将其删除) 如果从原始主题重新处理此数据,则输出主题中生成的时间戳可能早于保留策略的阈值,因此它们可能被标记为删除 既然它们在发布时有资格保留,我如何防

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

我有一个TimestampExtractor,它将Kafka记录的时间戳设置为原始事件的时间戳,以便在数据上执行窗口操作

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

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

既然它们在发布时有资格保留,我如何防止它们被删除?如何区分数据保留和数据处理的不同时间戳?在需要保留的输出主题上几乎必须使用“挂钟时间”时间戳吗?

正确的解决方案是为输出主题设置更高的保留时间。如果下游应用程序使用此数据,则可能需要使用“清除数据”请求()手动删除旧数据


另一种方法是,您可以仅操纵输出记录的时间戳。您需要升级到卡夫卡2.0(即将发布):

您不能将时间戳放在记录值或标题中吗?我可以,实际上我已经。。。但是,对于窗口,您需要使用记录时间戳。例如,在页面浏览窗口上创建会话,同时将页面浏览和会话作为输出主题。在这个场景中,pageviews主题用于转到DB,也用于会话。感谢您的帮助。Re:“正确的解决方案”-这将是一种过度的杀伤力。“清除数据”可以是一个选项,尽管它应该在以某种方式验证最后偏移量的自定义脚本中自动执行,例如,目标数据库上的实际消耗量,并使用min(预期删除日期,最后提交的偏移量)等。重新。输出记录时间戳:仅更改输出记录的时间戳-如果我只使用时间戳提取器,并为输出主题使用自定义的“OutputObjectTypes”,并使时间戳提取器获得我想要的时间戳-KafkaStreams会不会尊重该时间戳选择?如果数据与Kafka流一起使用,它将尊重源输入记录的
TimestampExtractor
返回的任何内容,这些时间戳将传播到下游/中间记录——通过新功能,您可以更改下游中间记录的时间戳,并“覆盖”返回的
TimestampExtractor
内容。我明白了。在API之后,生成
不是很好吗?也使用TimestampExtractor(TimestampExtractor)
吗?到目前为止,时间戳操作没有在DSL级别公开:您需要执行
流。转换(…)。到(…)
,并在
转换器中设置时间戳
——我个人不确定,如果我们应该在DSL级别公开它,因为DSL提供了一个基于时间戳的语义契约,更改时间戳将“违反”契约——然而,这是一个开源项目,任何人都可以建议新特性——请随时在开发人员邮件列表上对此展开讨论:)