微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在GenerateTableFetch处理器中手动设置“组件状态”

如何解决在GenerateTableFetch处理器中手动设置“组件状态”

我在GenerateTableFetch处理器中使用“组件状态”来确保不会两次从数据库查询相同的数据。由于迁移,必须重新部署流,在此过程中丢失其状态。如何手动设置此处理器的“组件状态”?我尝试独立使用ExecuteScript处理器(使用ECMAScript)来更新状态。一开始我尝试用

读取状态
var Scope = Java.type('org.apache.nifi.components.state.Scope');
var map = context.stateManager.getState(Scope.LOCAL).toMap();

但是我没有得到可循环的地图。我不了解的是如何选择GenerateTableFetch处理器来设置状态。

解决方法

StateManager仅授予组件修改其自身状态的权限,而不授予其他组件的状态,否则任何组件都可能错误地更改另一个组件的状态。

在后台使用组件的UUID存储状态。如果您在群集中,则它将存储在ZooKeeper中,并且您可以使用ZK CLI在ZooKeeper中手动修改数据。如果您是独立的,则它会存储在状态/本地预写日志中,我不确定是否有手动修改它的好方法。

此外,将流迁移到新集群时,首选机制是使用nifi工具箱中的ZK状态迁移器:

https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#zookeeper_migrator

如果要在独立实例之间迁移,则只需将状态/本地从原始集群复制到新集群。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。