这可能是使用 kafka-node -negative timestamp 的 Kafka Streams 中的 Error的重复,但肯定不是。我的 Kafka Streams 应用程序对每条消息执行一些转换逻辑并将其转发到新主题。应用程序中没有基于时间的聚合/处理,因此不需要使用任何自定义时间戳提取器。这个应用程序运行了好几天,但突然之间应用程序抛出了一个负时间戳异常。
Exception in thread "StreamThread-4" org.apache.kafka.streams.errors.StreamsException: Extracted timestamp value is negative, which is not allowed.
从所有 StreamThreads(总共 10 个)抛出此异常后,该应用程序有点冻结,因为几个小时内流没有进一步的进展。之后没有抛出异常。当我重新启动应用程序时,它开始只处理新来的消息。
现在的问题是,介于两者之间的那些消息发生了什么(在引发异常之后和重新启动应用程序之前)。万一,那些丢失的消息没有嵌入时间戳(极不可能,因为代理和生产者没有发生任何变化),是不是应用程序应该为每条这样的消息抛出异常?或者是不是像应用程序在第一次检测到消息中的负时间戳时停止流进度?有没有办法处理这种情况,以便应用程序可以处理流,即使在检测到任何负时间戳之后?我的应用程序使用 Kafka Streams 库版本 0.10.0.1-cp1。
注意:我可以轻松地建立一个自定义时间戳提取器,它可以检查每条消息中的负时间戳,但这对我的应用程序来说是很多不必要的开销。我只想了解为什么在检测到带有负时间戳的消息后流没有进行。