代码之家  ›  专栏  ›  技术社区  ›  Raman

Kafka流:InvalidStateStoreException

  •  0
  • Raman  · 技术社区  · 7 年前

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

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

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

    • 如果是,在try-catch块中哪里可以捕获此异常?
      如果异常可以被捕获,并且如果我们添加睡眠10分钟,存储会自动进入有效状态吗?
    • 如果没有,是否有一个方法可以用来检查存储状态并等待它生效?

    后续行动:

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

    它可以

    本质上,我想知道,如果我们将整个主题消费保持在一个节点上,那么如果由于某个线程关闭/终止而发生重新平衡,它是否会避免从内部主题重新构建存储?

    存储尚未准备好:您可以等到存储准备好——最好注册一个还原回调(查看文档以了解详细信息),以便在还原完成时得到通知,您可以重试查询存储。

    很抱歉,只是想澄清一下,是stateretorecallback还是stateretorelistener?我想是后一个。另外,是否需要重写staterestorecallback并包含用于还原存储的逻辑?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Matthias J. Sax    7 年前

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

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

    它可以。

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

    不。

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

    取决于引发异常的位置:

    • 或者,相应的 StreamThread 会死掉,但应用程序不会自动终止。您应该在 KafkaStreams 使用自定义代码(例如,终止应用程序)对即将结束的线程进行实例和响应。
    • 如果它是从 卡夫卡斯特雷姆斯 使用交互式查询, 流线型 不会受到影响。

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

    通常是的,尤其是当您提到交互式查询功能时。

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

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

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

    更新

    本质上,我想知道,如果我们将整个主题消费保持在一个节点上,那么如果由于某个线程关闭/终止而发生重新平衡,它是否会避免从内部主题重新构建存储?

    是(非EOS病例)。其他线程将检测本地存储并重用它。

    StateRestoreCallback或StateRestoreListener

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