首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

踩坑记| flink state 序列化 java enum 竟然岔劈了

1.序篇-先说结论 本文主要记录博主在生产环境踩的 flink 针对 java enum serde 时的坑。...结论:在 flink 程序,如果状态中有存储 java enum,那么添加或者删除 enum 的一个枚举值时,就有可能导致状态恢复异常,这里的异常可能不是在恢复过程中会实际抛出一个异常,而是有可能是...发现状态存储的 DimNameEnum.province,DimNameEnum.age 的数据都是正确的,但是缺缺少了 DimNameEnum.sex,多了 (uv_type,男) 这样的数据,于是查看代码...3 发现 enum 类型的序列化器是 EnumSerializer, 看看 EnumSerializer 的 serde 实现,如图所示: 4 最关键的两个变量: 序列化时用 valueToOrdinal...6.总结篇 本文主要介绍了 flink 枚举值 serde 的坑,当在 enum 添加删除枚举值时,就有可能导致状态岔劈。

52440
您找到你想要的搜索结果了吗?
是的
没有找到

SqlAlchemy 2.0 中文文档(五)

对于上面示例明确使用了mapped_column.nullable的类型,我们可以将Optional[]泛型修饰符应用于我们的任何类型,以使字段在 Python 级别是可选的或不可选的,这将独立于在数据库中发生的...的实例解析为与registry.type_annotation_map字典enum.Enum或typing.Literal条目匹配的类型注释。...对于上面示例显式使用mapped_column.nullable的类型,我们可以对任何类型应用Optional[]通用修饰符,以使该字段在 Python 级别是可选的还是不可选的,这将独立于在数据库中发生的...将类映射属性运行时分配给映射类,如果使用装饰器(registry.mapped())或命令式函数(registry.map_imperatively())来映射类,则不会起作用。...对于上面示例显式使用了mapped_column.nullable的类型,我们可以对我们的任何类型应用Optional[]泛型修饰符,以便在 Python 级别该字段是可选的还是不可选的,这将独立于数据库中发生的

9610

Java 中一个你绝对没用过,但是很好用的数据结构

,毕竟 Map 的数据设置我们没办法控制,完全不知道别人会 put 一些什么样的数据进去,或者说如果某些场景我们 Map 的数据 Key类型和个数是固定,那在这种情况的下,我们如何提升系统的安全性和性能呢...这个时候我们就可以考虑使用 EnumMap,EnumMap 顾名思义首先是一个 Map,其次它的 key 只能是枚举,大家都知道枚举的实例个数是固定的,而且还是预编译的,所以在很大程度上保证了数据的安全性...当类型检查通过以后,会通过枚举的 ordinal() 方法获取该枚举实例的索引,这个方法会返回一个 int 值,返回的值跟枚举在编写的时候的顺序有关系,比如说我们上面创建的 Color 枚举,Color.BLUE.ordinal...拿到索引过后,就会在对应的数组位置上放上 value 值。 获取数据的时候就更简单了,直接通过 key 获取到索引,然后从数组拿取数据即可。...>)key).ordinal()]) : null); } 可以看到整个 EnumMap 的 put 和 get 的效率是非常高的,都是在一维数组中直接根据索引定向处理。

41450

Java 中一个你绝对没用过,但是很好用的数据结构

put 一些什么样的数据进去,或者说如果某些场景我们 Map的数据 Key类型和个数是固定,那在这种情况的下,我们如何提升系统的安全性和性能呢?...这个时候我们就可以考虑使用 EnumMap,EnumMap 顾名思义首先是一个 Map,其次它的 key 只能是枚举,大家都知道枚举的实例个数是固定的,而且还是预编译的,所以在很大程度上保证了数据的安全性...当类型检查通过以后,会通过枚举的 ordinal()方法获取该枚举实例的索引,这个方法会返回一个 int值,返回的值跟枚举在编写的时候的顺序有关系,比如说我们上面创建的 Color枚举,Color.BLUE.ordinal...拿到索引过后,就会在对应的数组位置上放上 value值。 获取数据的时候就更简单了,直接通过 key 获取到索引,然后从数组那去数据即可。...>)key).ordinal()]) : null); } 可以看到整个 EnumMap 的 put 和 get 的效率是非常高的,都是在一维数组中直接根据索引定向处理。

14310

枚举类型

枚举的正式解释:枚举类型是jdk5新增的特性,它是一种加了限制的特殊的class类型。这里的限制指的是对枚举类型所能创建的对象的个数进行了限制!...如下图所示: ​ 枚举类不能继承,因为枚举默认继承Enum类 ​ 枚举可以实现接口 3.1、Enum抽象类常见方法 方法 方法说明 String name() 返回此枚举常量的名称,在其枚举声明对其进行声明...static Enum valueOf(String name) 返回带指定名称的指定枚举类型的枚举常量 int ordinal() 返回枚举常量的序数(初始常量序数为零) String toString...System.out.println(Arrays.toString(values)); int index = tue.ordinal();//返回该枚举常量在枚举类索引...(); for (Map.Entry entry:entries) { System.out.println("key:"+entry.getKey

79910

夯实Java基础系列12:深入理解Java的反射机制

EnumSet保证集合的元素不重复;EnumMapkeyenum类型,而value则可以是任意类型。...EnumMap map = new EnumMap(Color.class); map.put(Color.Blue...那么像枚举也是在JDK1.5才引入的,又是怎么实现的呢? Java在1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...它保证了枚举类型不可变性,不能通过克隆,不能通过序列化和反序列化来复制枚举,这能保证一个枚举常量只是一个实例,即是单例的,所以在effective java推荐使用枚举来实现单例。...这样保证了每个枚举类型及枚举常量都是不可变的。可以利用枚举的这两个特性来实现线程安全的单例。

1.6K00

初探Java枚举类

注意一个细节:如果要为 enum 定义方法,那么必须在 enum 的最后一个实例尾部添加一个分号[;]。 此外,在 enum ,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。...System.out.println(ColorEnum.RED.ordinal()); } } 3.3 枚举接口 enum 不可以继承另外一个类,当然,也不能继承另一个 enum ?...JDK7 以后,switch 已经支持 int、char、Stringenum 类型的参数。这几种类型的参数比较起来,使用枚举的 switch 代码更具有可读性。...Map 实现。...虽然使用其它的 Map 实现(如 HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,

67410

夯实Java基础系列14:深入理解Java枚举类

EnumSet保证集合的元素不重复;EnumMapkeyenum类型,而value则可以是任意类型。...EnumMap map = new EnumMap(Color.class); map.put(Color.Blue...那么像枚举也是在JDK1.5才引入的,又是怎么实现的呢? Java在1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...它保证了枚举类型不可变性,不能通过克隆,不能通过序列化和反序列化来复制枚举,这能保证一个枚举常量只是一个实例,即是单例的,所以在effective java推荐使用枚举来实现单例。...这样保证了每个枚举类型及枚举常量都是不可变的。可以利用枚举的这两个特性来实现线程安全的单例。

50620

Java枚举(enum)常用的用法总结

EnumSet保证集合的元素不重复; EnumMapkeyenum类型,而value则可以是任意类型。 关于这个两个集合的使用就不在这里赘述,可以参考JDK文档或者参考下文。...概念 enum 的全称为 enumeration, 是 JDK 1.5 引入的新特性。 在Java,被 enum 关键字修饰的类型就是枚举类型。...getDescription() { return description; } } 枚举不可以继承 enum 不可以继承另外一个类,当然,也不能继承另一个 enum 。...EnumSet 是枚举类型的高性能 Set 实现。它要求放入它的枚举常量必须属于同一枚举类型。 EnumMap 是专门为枚举类型量身定做的 Map 实现。...虽然使用其它的 Map 实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以

22110

夯实Java基础系列14:深入理解Java枚举类

EnumSet保证集合的元素不重复;EnumMapkeyenum类型,而value则可以是任意类型。...EnumMap map = new EnumMap(Color.class); map.put(Color.Blue...那么像枚举也是在JDK1.5才引入的,又是怎么实现的呢? Java在1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...它保证了枚举类型不可变性,不能通过克隆,不能通过序列化和反序列化来复制枚举,这能保证一个枚举常量只是一个实例,即是单例的,所以在effective java推荐使用枚举来实现单例。...这样保证了每个枚举类型及枚举常量都是不可变的。可以利用枚举的这两个特性来实现线程安全的单例。

36600

(50) 剖析EnumMap 计算机程序的思维逻辑

上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap。 为什么要有一个专门的类呢?...= " + keyType); } 如果类型不对,会抛出异常。类型正确的话,调用ordinal获取索引index,并将值value放入值数组vals[index]。...unmaskNull(vals[((Enum)key).ordinal()]) : null); } 键有效的话,通过ordinal方法取索引,然后直接在值数组vals里找。...isValidKey(key)) return null; int index = ((Enum)key).ordinal(); Object oldValue = vals...小结 本节介绍了EnumMap的用法和实现原理,用法上,如果需要一个Map且键是枚举类型,则应该用它,简洁、方便、安全,实现原理上,内部使用数组,根据键的枚举索引直接操作,效率很高。

43880

Java的枚举,竟然有这么多不为人知的知识点

Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全性。enum关键字是Java的保留关键字。...在Java,通过enum来声明枚举类型,默认继承自java.lang.Enum。所以声明枚举类时无法再继承其他类。...,MapKey必须是枚举类型。...EnumMap内部是通过数组实现的,效率比普通的Map更高一些。EnumMap的key值不能为null,并且EnumMap也不是线程安全的。...小结 枚举在日常编码几乎是必不可少的,如何用好,如何用精,还需要基础知识的铺垫,本文也正是基于此带大家从头到尾梳理了一遍。有所收获就点个赞吧。

53830
领券