Kafka Streams:InvalidStateStoreException

时间:2018-06-02 16:49:59

标签: windows apache-kafka apache-kafka-streams

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

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

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

  • 如果是,可以在try-catch块中捕获此异常的位置?
    如果可以捕获异常,并且如果我们将睡眠添加10分钟,那么商店会自动进入有效状态吗?
  • 如果没有,是否有一种方法可用于检查商店状态并等待其生效?

随访:

  

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

     

它可以

基本上我想知道我们是否将整个主题消耗保留在单个节点上,如果发生重新平衡,是否会因为其中一个线程停止/终止而避免从内部主题重新构建存储?

  

存储尚未就绪:您可以等到商店准备就绪 - 最好注册还原回调(请查看文档以获取详细信息),以便在还原完成后获得通知,然后您可以重试查询商店。

抱歉,只是为了清楚上面的内容,是StateRestoreCallback还是StateRestoreListener?我认为这是后者。此外,是否需要覆盖StateRestoreCallback并包含还原商店的逻辑?

1 个答案:

答案 0 :(得分:0)

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

  

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

它可以。

  

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

没有

  

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

取决于抛出的异常:

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

这个异常可以在try-catch块中捕获到哪里?

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

  

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

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

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

<强>更新

  

基本上我想知道我们是否将整个主题消耗保留在单个节点上,如果发生重新平衡,是否会因为其中一个线程停止/终止而避免从内部主题重新构建存储? / p>

是(对于非EOS案例)。其他线程会检测本地存储并重用它。

  

StateRestoreCallback或StateRestoreListener

是的,StateRestoreListener。只有在编写自定义状态存储时,才会实现StateRestoreCallback