java—在多个apache storm bolt任务之间共享一个并发hashmap

knpiaxh1  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(387)

我有一个storm bolt,它从某些元组将键和值写入hashmap,并使用存储在其他元组中的键从hashmap读取值。当任务数设置为1时,它可以正常工作,但是当我增加这个数字时,键开始返回null值,而它们不应该返回null值。我假设这是因为每个bolt任务都在创建自己的hashmap示例,所以数据不共享。如何让所有bolt任务共享一个hashmap?
我目前正在prepare方法中创建hashmap,如下所示:

protected Map<String, JsonObject> hashMap;

@Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector)
{
    _collector = collector;
    hashMap = Collections.synchronizedMap(new ConcurrentHashMap<String, JsonObject>());

}

我还尝试在拓扑级别定义hashmap,并将其作为一个变量提供给我的bolt,但这没有起作用。

smdncfj3

smdncfj31#

任务可以部署到不同的工作者(即,不同的机器),因此,任务之间不能共享内存中的任何内容。
任务作为“独立的工作单元”必须完全依赖于他们的投入。

相关问题