You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hazelcast Jet读取IMDG数据 二者是否需要单独配置

问题解答

问题根因

你当前代码中两次调用Hazelcast.newHazelcastInstance()和Jet.newJetInstance(),默认会启动两个独立的Hazelcast节点,未配置集群发现规则的情况下属于两个完全隔离的集群,因此数据无法互通。

核心认知说明

Hazelcast Jet底层本身就内嵌了完整的Hazelcast IMDG实例,支持所有IMDG的原生API(包括IMap操作、MapStore持久化配置等),无需单独启动独立的IMDG实例。

实现共享IMap的两种方案

  • 方案一:单实例部署(推荐)
    直接仅启动Jet实例,所有IMDG的缓存操作、MapStore配置都直接基于Jet实例完成,不需要额外创建独立的HazelcastInstance。单套配置即可同时满足缓存持久化和流批处理的需求,所有IMap天然共享。
  • 方案二:集群互通部署
    如果业务需要将IMDG集群和Jet集群分开部署,需保证两套集群使用相同的集群名,配置一致的集群发现规则(如组播、TCP-IP节点列表),Jet节点会作为对等节点或客户端加入IMDG集群,即可直接读取IMDG侧的所有IMap数据。

修改后的测试代码示例

public class Test {
    // 仅初始化Jet实例,自带完整IMDG能力
    JetInstance jet = Jet.newJetInstance();

    public static void main(String[] args) {
        Test t = new Test();
        t.loadIntoIMap();
        t.readFromIMap();
    }

    public void loadIntoIMap() {
        // 直接用Jet实例获取IMap,和原生IMDG实例操作完全一致
        IMap<String, String> map = jet.getMap("my-distributed-map");
        // MapStore配置直接配到Jet的配置文件中即可生效
        map.put("1", "John");
        map.put("2", "Mary");
        map.put("3", "Jane");
    }

    public void readFromIMap() {
        System.err.println("--manu---");
        jet.getMap("s").put("1", "2");
        System.err.println(jet.getMap("s").size());
        // 此处可正常读到3条数据
        System.err.println(jet.getMap("my-distributed-map").size());
    }
}

配置说明

如果需要自定义配置(如MapStore规则、集群参数、作业参数),仅需维护一套hazelcast.yaml/hazelcast.xml配置文件即可:

  • 所有IMDG相关配置(如MapStore、内存策略、分区规则)直接按IMDG配置项编写即可,Jet启动时会自动识别加载
  • 仅当需要配置Jet特有的流批作业参数时,才需要额外添加Jet专属配置项,两者可以共存于同一份配置文件中

内容的提问来源于stack exchange,提问作者vivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:39:02