在我的Flink应用程序中,我使用java.time.instant表示UTC时间戳。应用程序运行良好,但我最近在Flink日志中注意到这条消息:
“类class java.time.instant不能用作POJO类型,因为并非所有字段都是有效的POJO字段,必须作为GenericType处理。有关对性能影响的详细信息,请阅读Flink文档中的”数据类型&序列化“。”
日志消息有点误导,但您的理解是正确的。instant
在Flink1.6中使用Kryo序列化。
在Flink1.7+instant
将使用InstantSerializer
序列化,而不是使用Kryoserializer
序列化。
您的POJO是否会被这样对待,并不取决于instant
将如何在POJO中序列化。消息只是说系统试图查看instant
是否是POJO。
public class SpecialMomentWithName {
private String name;
public Instant specialMoment;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
SpecialMomentWithName
将始终作为Flink中的POJO处理。
在微基准测试中使用Kryo与新的InstanceSerializer序列化instant
时,您可能会发现性能受到了很小的冲击。很难预测Flink作业的性能是否会从这样的更改中受益:如果instant
的序列化成本消耗了大部分CPU时间(并且作业是CPU限制的),那么我希望性能得到改善。如果您的网络或硬盘(当使用RocksDB时)是限制因素,我不会期望性能得到改善。
如果没有对实际性能下降的地方进行一些分析,我就不会优化实例
序列化的性能。如果发现像这样序列化时间会影响性能,可以尝试将实例表示为长
。这将降低代码的可读性,并且可能会有额外的CPU周期用于类型之间的转换。
我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?
我有一个从CSV文件读取的: 据我所知,是一个POJO: 我还有一个简单的课程: 但当我尝试使用它时,例如从测试中: 我得到以下错误: 我读过这些问题和答案,但运气不好: 任务不可序列化Flink 无法在scala中序列化任务 任务不可序列化:java。伊奥。仅在类而非对象上调用闭包外函数时NotSerializableException
使用GSON如何将列表的类名附加到输出的json字符串中?我已经浏览了api,但没有找到任何与此相关的参考资料。我在真实代码中使用了GsonBuilder,但也没有看到任何选项。 这将提供以下输出: json=[{“name”:“Alice”},{“name”:“Bob”}] 如何实现以下输出?或者类似的东西。 json={"人":[{"名字":"爱丽丝"},{"名字":"鲍勃"}]} 或 jso
我需要将包含类型为Pair的对象的列表序列化为xml 首先,我创建了一个类PairList来保存对的列表,然后我创建了一个实际的类,它表示一对两个值,key和value。 然后,我尝试序列化它: 不幸的是,我遇到了一个异常:。欢迎任何关于如何避免此异常并序列化该类的想法。 如果我选择不序列化ttype和utype字段(通过将其设置为受保护或私有),则序列化有效。我不明白为什么它不想序列化类型字段。
我有一个简单的枚举,我想序列化和反序列化。该类如下所示: 问题是,我通过restful调用发送它,接收方可以接收任何类型(因此它只知道它将接收对象)。所以Jackson应该能够找出反序列化它的参数类型。 有可能这样做吗?我认为在生成的json中包含类名应该可以让Jackson判断出类型,但我一直无法做到这一点。