繁体   English   中英

nifi 控制器服务是否在集群中共享状态?

[英]Do nifi controller services share state in a cluster?

单个 Nifi 节点

我们在自定义控制器服务级别上有一个 volatile 变量。 我们在两个定制处理器中使用此服务。 Processor1 更改变量状态,Processor2 应该看到更新的值。

如果我们在集群环境中做同样的例子呢? Nifi 是否为每个 Nifi 节点创建单独的服务实例,从而不共享其间的任何状态? 还是主节点只有这个服务的实例?

我设置了一个服务和一个处理器来测试这个。

服务具有私有 volatile var。 它可以获取和更新该变量:

public class ClusterStateTestServiceImpl extends AbstractControllerService implements ClusterStateTestService {

    private volatile UUID testValue;

    @OnEnabled
    public void onEnabled(final ConfigurationContext context) throws InitializationException {
        this.testValue = UUID.randomUUID();
    }

    @Override
    public UUID getTestValue() {
        return testValue;
    }

    @Override
    public UUID updateTestValue() {
        this.testValue = UUID.randomUUID();
        return testValue;
    }
}

处理器再次读取、记录、更新和记录:

public class ClusterStateTestProcessor extends AbstractProcessor {

    public static final PropertyDescriptor CLUSTER_STATE_TEST_SERVICE = new PropertyDescriptor.Builder()
            .name("Test Service")
            .required(true)
            .identifiesControllerService(ClusterStateTestService.class)
            .build();

    static final PropertyDescriptor HOSTNAME = ...

    private ClusterStateTestService clusterStateTestService;
    private String hostname;

    @Override
    public void onTrigger(final ProcessContext context, final ProcessSession session) {
        FlowFile flowFile = session.get();
        if ( flowFile == null ) return;

        UUID existingUuid = clusterStateTestService.getTestValue();
        getLogger().info("Host: " + hostname + " || Test value: " + existingUuid.toString());
        UUID newUuid = clusterStateTestService.updateTestValue();
        getLogger().info("Host: " + hostname + " || Test value updated to: " + newUuid.toString());

        session.transfer(flowFile, SUCCESS);
    }
}

我在 nifi1 上触发了处理器,然后在 nifi2 上触发了处理器,结果如下:

2022-05-23 08:42:30,774 INFO [Timer-Driven Process Thread-16] c.t.ClusterStateTestProcessor ClusterStateTestProcessor[id=8b55386b-4459-3de3-82b7-83b7fbd9e771] Host: nifi1 || Test value: c1840b9b-5766-4341-851a-2065349017d3
2022-05-23 08:42:30,787 INFO [Timer-Driven Process Thread-16] c.t.ClusterStateTestProcessor ClusterStateTestProcessor[id=8b55386b-4459-3de3-82b7-83b7fbd9e771] Host: nifi1 || Test value updated to: a44b2119-b636-4230-8b38-1b35445146f9
                                                              
2022-05-23 08:42:30,776 INFO [Timer-Driven Process Thread-14] c.t.ClusterStateTestProcessor ClusterStateTestProcessor[id=8b55386b-4459-3de3-82b7-83b7fbd9e771] Host: nifi2 || Test value: cb8d79d2-1eb8-4269-a043-902936cb12e0
2022-05-23 08:42:30,776 INFO [Timer-Driven Process Thread-14] c.t.ClusterStateTestProcessor ClusterStateTestProcessor[id=8b55386b-4459-3de3-82b7-83b7fbd9e771] Host: nifi2 || Test value updated to: e1f76321-0e34-4aae-bd06-6b1c84419817

结论

由于每个处理器读取不同的 UUID,每个 nifi 节点都有自己的服务实例,并且不会以任何方式共享状态。

暂无
暂无

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

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