在定义 MapState的时候,value的类型需要两个泛型参数:
MapState<String, Summary2<Long,Long>> lastState;
第一次初始化 State Description的时候,使用如下方式:
MapStateDescriptor<String, Summary2> descriptor = new MapStateDescriptor<>("stateDesc", String.class, Summary2.class);
本地测试没有问题,在作业上传到阿里云filnk平台后,任务执行时读取value 时报对象转换异常,
怀疑是对象序列化时,泛型擦除问题,更换 MapStateDescriptor 的初始化方式:
TypeHint<Summary2<Long, Long>> typeHint = new TypeHint<Summary2<Long, Long>>() {};
MapStateDescriptor<String, Summary2<Long,Long>> descriptor = new MapStateDescriptor("lastStateDesc", TypeInformation.of(String.class), TypeInformation.of(typeHint));
问题解决!阿里云默认的StateBackend是自己研发的 Gemini,看样子跟 系统自带的 FsCheckpoint 序列化机制有些不同,先记录一下。