繁体   English   中英

卡夫卡流:InvalidStateStoreException

[英]Kafka Streams: InvalidStateStoreException

如果有状态流应用程序在单个节点上以6个线程启动,是否会发生上述异常?

如果在节点1上启动消耗特定主题的有状态流应用程序使其在不同的节点上运行,是否需要遵循任何流程?

如果有状态流应用程序在2个节点上启动,并且发生上述异常,流应用程序是否会立即终止?

  • 如果是,则在try-catch块中可以在哪里捕获此异常?
    如果可以捕获异常,并且如果我们增加睡眠时间10分钟,那么商店会自动进入有效状态吗?
  • 如果不是,是否有一种方法可用于检查存储状态并等待其变为有效状态?

跟进:

如果有状态流应用程序在单个节点上以6个线程启动,是否会发生上述异常?

它可以

本质上,我想知道我们是否将整个主题消耗都保留在单个节点上,如果由于线程之一中断/终止而发生重新平衡,是否可以避免从内部主题重新构建商店?

商店尚未准备好:您可以等到商店准备好为止-最好注册一个还原回调(有关详细信息,请参阅文档)以在还原完成时得到通知,然后可以重试查询商店。

抱歉,上面已经很清楚了,是StateRestoreCallback还是StateRestoreListener? 我认为这是后来的。 另外,是否需要覆盖StateRestoreCallback并包括恢复存储的逻辑?

InvalidStateStoreException可能有不同的原因,因此,如果没有更多上下文,很难回答您的问题。

如果有状态流应用程序在单个节点上以6个线程启动,是否会发生上述异常?

它可以。

如果在节点1上启动消耗特定主题的有状态流应用程序使其在不同的节点上运行,是否需要遵循任何流程?

没有。

如果有状态流应用程序在2个节点上启动,并且发生上述异常,流应用程序是否会立即终止?

取决于它在哪里引发异常:

  • 要么,相应的StreamThread将死亡,但应用程序不会自动终止。 您应该在KafkaStreams实例上注册未捕获的异常处理程序,并使用自定义代码对即将死去的线程做出反应(例如终止应用程序)。
  • 如果使用交互查询从KafkaStreams抛出该异常,则StreamThread不会受到影响。

在try-catch块中可以在哪里捕获此异常?

通常是,特别是如果您提到交互式查询功能。

如果我们增加睡眠10分钟,商店会自动进入有效状态吗?

如果您指的是交互式查询功能,那么睡眠不是一个好的策略。 导致异常的原因多种多样,您需要做出相应的反应:

  • store不是本地的,而是在不同的节点上:您可以通过检查store元数据来解决此问题。
  • 商店尚未准备好:您可以等到商店准备好为止-最好注册一个还原侦听器(查看文档以获取详细信息),以在还原完成时得到通知,然后可以重试查询商店。

更新资料

本质上,我想知道我们是否将整个主题消耗都保留在单个节点上,如果由于线程之一中断/终止而发生重新平衡,是否可以避免从内部主题重新构建商店?

是(对于非EOS情况)。 其他线程将检测本地存储并重新使用它。

StateRestoreCallback或StateRestoreListener

是的,它是StateRestoreListener 仅当编写自定义状态存储时,才可以实现StateRestoreCallback

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM