Kafka Streams 异常状态恢复
Kafka Streams state restoration on Exception
使用 kafka 流,我们可以进行有状态操作。状态保存在实例本地。此状态也备份在更新日志主题中,以防您丢失本地状态。
我看到如果流应用程序中出现未处理的异常,也会发生完整的状态恢复。即使您使用持久性存储。想象一下,如果您有数 TB 的状态并且由于空指针异常,kafka 将开始恢复这些海量数据。这将非常耗时。
为什么kafka在出现未处理的异常后会完全恢复状态?我们可以避免这种情况吗?将代码包装在 try-catch 中不是一种选择,因为消息随后被视为已成功处理。我们做了一些复杂的逻辑,还在状态存储中保存了一些值。
默认情况下,运行时异常会停止您的流处理,但您可以使用异常处理程序在某种程度上控制它 -> https://developer.confluent.io/learn-kafka/kafka-streams/error-handling/
例如,您可以将该特定消息发送到死信队列以进行处理或稍后检查错误。
您还可以使用 num.standby.replicas
配置状态存储复制以避免长时间/昂贵的恢复时间,检查 -> https://kafka.apache.org/30/documentation/streams/architecture#streams_architecture_recovery
祝你好运!
使用 kafka 流,我们可以进行有状态操作。状态保存在实例本地。此状态也备份在更新日志主题中,以防您丢失本地状态。
我看到如果流应用程序中出现未处理的异常,也会发生完整的状态恢复。即使您使用持久性存储。想象一下,如果您有数 TB 的状态并且由于空指针异常,kafka 将开始恢复这些海量数据。这将非常耗时。
为什么kafka在出现未处理的异常后会完全恢复状态?我们可以避免这种情况吗?将代码包装在 try-catch 中不是一种选择,因为消息随后被视为已成功处理。我们做了一些复杂的逻辑,还在状态存储中保存了一些值。
默认情况下,运行时异常会停止您的流处理,但您可以使用异常处理程序在某种程度上控制它 -> https://developer.confluent.io/learn-kafka/kafka-streams/error-handling/
例如,您可以将该特定消息发送到死信队列以进行处理或稍后检查错误。
您还可以使用 num.standby.replicas
配置状态存储复制以避免长时间/昂贵的恢复时间,检查 -> https://kafka.apache.org/30/documentation/streams/architecture#streams_architecture_recovery
祝你好运!