如果有状态流应用程序是以单个节点上的6个线程启动的,那么会出现上述异常吗?
如果在节点1上启动的有状态流应用程序消耗了特定的主题,那么是否有任何需要遵循的进程来在不同的节点上运行?
如果有状态流应用程序在2个节点上启动,如果发生上述异常,流应用程序会立即终止吗?
跟进:
如果有状态流应用程序是以单个节点上的6个线程启动的,那么会出现上述异常吗? 它可以
本质上,我在想,如果我们将整个主题消耗保持在一个节点上,那么如果由于线程之一关闭/终止而发生了再平衡,它会避免从内部主题重新构建存储吗?
商店还没有准备好:您可以等到商店准备好--最好注册一个恢复回调(查看文档以获得详细信息),以便在恢复完成时得到通知,并且可以重试查询该存储。
对不起,我想澄清一下,是StateRestoreCallback还是StateRestoreListener?我想是后面那个。另外,是否需要重写StateRestoreCallback并包含恢复存储的逻辑?
发布于 2018-06-02 21:14:04
InvalidStateStoreException
可能有不同的原因,因此,如果没有更多的上下文,很难回答您的问题。
如果有状态流应用程序是以单个节点上的6个线程启动的,那么会出现上述异常吗?
它可以。
如果在节点1上启动的有状态流应用程序消耗了特定的主题,那么是否有任何需要遵循的进程来在不同的节点上运行?
不是的。
如果有状态流应用程序在2个节点上启动,如果发生上述异常,流应用程序会立即终止吗?
取决于它在何处引发的异常:
StreamThread
会死掉,但是应用程序不会自动终止。您应该在KafkaStreams
实例上注册一个未登录的异常处理程序,并使用自定义代码(例如,终止应用程序)对即将结束的线程作出反应。KafkaStreams
抛出它,则不会影响StreamThread
。在试图捕获块中,在哪里可以捕获此异常?
通常是这样的,特别是当您提到交互式查询功能时。
如果我们增加睡眠10分钟,存储会自动进入有效状态吗?
如果您引用交互式查询功能,睡眠不是一个好策略。导致此异常的原因有多种,因此您需要作出相应的反应:
更新
本质上,我在想,如果我们将整个主题消耗保持在一个节点上,那么如果由于线程之一关闭/终止而发生了再平衡,它会避免从内部主题重新构建存储吗?
是的(对于非EOS案件)。其他线程将检测本地存储并重用它。
StateRestoreCallback或StateRestoreListener
是的,是StateRestoreListener
。只有当您编写自定义状态存储时,才会实现StateRestoreCallback
。
https://stackoverflow.com/questions/50659129
复制相似问题