【发布时间】:2021-11-01 10:55:03
【问题描述】:
我们正在使用使用 STREAM_TIME 标点符号的自定义转换器。当我记录来自转换函数的消息时,来自 context.timestamp() 的流时间按预期显示 - 基于使用时间戳提取器派生的数据的合理日期。
现在 - 在过去的某个时候,我们收到了一些恶意消息,将流时间提前到了 2036 年。我们现在已经停止了这些上游,并重新启动了 Kafka Streams。
当流启动时,标点符号会在受影响任务的启动时运行,但会显示 2036 的时间戳 - 即使消息通过转换,context.timestamp 仍会显示有效日期。因此,流永远不会前进标点符号再也不会跑了。下面是我如何在标点符号中导出时间戳的示例...
override def punctuate(timestamp: Long) : Unit = {
val currentTimeStamp = timestamp
【问题讨论】:
-
一些日志:当标点符号运行时(仅在启动时,日志显示时间戳) - 流排序标点符号:为任务 4_30 执行:当前:2086007292029 但是,在运行相同的转换函数中任务id,时间戳完全不同-stream ts=1635778876000
-
标点符号似乎在 kafka 流启动时运行,甚至在它处理任何消息之前 - 但它的流时间为 2086007292029。这怎么可能?有没有我找不到的状态?我们也在启动流之前运行 cleanUp 函数...
标签: apache-kafka apache-kafka-streams