运行 仅在包含相关 KEY 的节点上进行流操作

Running a streaming operation ONLY on the node which contains the relevant KEY

假设我在一个大型集群上有一个大型 IStreamMap,我想对几个键进行操作。我可以如下所示正确调整过滤器表达式,但我的理解是这将在所有节点上 运行。并且 99% 的节点将被迫流式传输地图,即使最终没有任何结果。有没有办法让 Hazelcast jet 集群仅 运行 在与这些键对应的节点上进行操作?应该工作的代码如下,但我认为它效率不高。 (在我的例子中,我可能 运行 在大型分布式地图上多次执行这个操作,所以如果我能提前知道 99% 的节点是与所选键不相关。)

final IStreamMap<String, Integer> streamMap = instance1.getMap("source");
    // stream of entries, you can grab keys from it
             streamMap.stream()
                    .filter(key -> key == 1 || key = 9999999)
                    .forEach(key -> <do something interesting>));

IStreamMap 我想是三年前从 Hazelcast Jet 中删除的。您应该通过其 Pipeline API.

使用 Jet

您可以尝试使用带有谓词的 map 来源:

Pipeline p = Pipeline.create();
BatchStage<Entry<K, V>> stage = p.readFrom(Sources.map("name", 
        (Map.Entry<K, V> mapEntry) -> myCondition(mapEntry), 
        e -> e));

不过,这仍会扫描整个地图。如果您只是有一组您感兴趣的键,那么更适合您的用例的可能是 IMap.executeOnKeys().