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

K8s上GridGain厚客户端启动失败:NoSuchMethodError错误求助

GridGain厚客户端启动报错:NoSuchMethodError: PageIO.registerH2

问题描述

我们正尝试将GridGain 8.8.22集成到现有Java客户端应用,构建厚客户端实现内存缓存与近缓存功能。Kubernetes集群中已部署纯内存模式(无持久化)的GridGain主服务器,但客户端启动时抛出java.lang.NoSuchMethodError: org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO.registerH2异常,无法正常启动,且服务端未检测到客户端连接。

客户端Gradle依赖配置

// Ignite
def igniteVersion = '8.8.22'
compile group: 'org.gridgain', name: 'ignite-core', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-spring', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-indexing', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-h2', version: igniteVersion
compile group: 'org.apache.ignite',name: 'ignite-kubernetes', version: '2.4.0'

客户端核心配置代码

IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setClientMode(true);

CacheConfiguration<Object, Object> cacheCfg = new CacheConfiguration<Object, Object>();
cacheCfg.setName(cacheName);
// 创建近缓存/底层缓存配置
NearCacheConfiguration<Object, Object> nearCfg = new NearCacheConfiguration<>();
nearCfg.setNearEvictionPolicyFactory(new LruEvictionPolicyFactory<>(100_000));
cacheCfg.setNearConfiguration(nearCfg);

cfg.setCacheConfiguration(cacheCfg);

// 配置Kubernetes发现
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryKubernetesIpFinder ipFinder = new TcpDiscoveryKubernetesIpFinder();
ipFinder.setNamespace("gridgain");
ipFinder.setServiceName("gridgain-service");
spi.setIpFinder(ipFinder);

// 将发现SPI设置到IgniteConfiguration
cfg.setDiscoverySpi(spi);

Ignite ignite = Ignition.start(cfg);

GridGain主服务器配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.apache.ignite.configuration.IgniteConfiguration">

        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
                        <property name="namespace" value="gridgain"/>
                        <property name="serviceName" value="gridgain-service"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

已尝试操作

  • 添加索引依赖、调整代码写法,问题未解决
  • 因未找到对应GridGain 8.8.22版本的Kubernetes依赖,使用了Apache Ignite 2.4.0的ignite-kubernetes包

排查思路与解决方案

1. 核心原因:版本依赖冲突

混用GridGain 8.8.22和Apache Ignite 2.4.0的依赖会导致内部类结构不兼容。PageIO.registerH2方法在两个版本中的定义不一致,客户端初始化时触发H2相关逻辑,因版本不匹配找不到方法,抛出异常。

2. 修复依赖配置

GridGain 8.8.22的ignite-core已内置Kubernetes IP Finder实现,无需单独引入Apache Ignite的ignite-kubernetes依赖。修改后的Gradle依赖如下:

// Ignite
def igniteVersion = '8.8.22'
compile group: 'org.gridgain', name: 'ignite-core', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-spring', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-indexing', version: igniteVersion
compile group: 'org.gridgain', name: 'ignite-h2', version: igniteVersion

3. 验证客户端配置与权限

  • 客户端代码无需修改,TcpDiscoveryKubernetesIpFinder类来自GridGain内置的包,删除依赖后可直接使用
  • 确保客户端Pod的ServiceAccount拥有访问Kubernetes API的权限,能够列出gridgain-service的端点资源

4. 异常关联说明

虽然服务端未配置持久化,但客户端的ignite-indexing和ignite-h2依赖会触发内部H2初始化逻辑,版本冲突导致该逻辑执行失败,因此出现了看似与持久化相关的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:35:27