Flink 异常 - 2.The object probably contains or references non serializable fields 无法序列化问题

本文介绍了在使用 Flink 自定义 Source 时遇到的序列化错误,特别是涉及到 Scala 类和 log4j 的问题。提供了解决 Scala 类中非序列化字段的两种方法,包括使用 @transient 和在 open 函数中初始化,以及 Java 中避免 log4j 序列化的策略。此外,还讨论了当类本身或其内部类需要序列化时的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.引言

使用 Flink 自定义 Source 生成数据时,集群提交任务时显示 org.apache.log4j.Logger@72c927f1 is not serializable. The object probably contains or references non serializable fields. 报错序列化相关错误 :

二.问题解决

1.Scala Class 初始化不需要对应变量

错误代码:

val logger = Logger.getLogger(classOf[T])

正确代码:

通过 scala 延迟加载功能与 @transient 关键字忽略对该变量的序列化,前提是该变量在对应 class[T] 初始化时不需要,如果某个变量在 class[T] 初始化时调用,加了 @transient 关键字会导致该变量为 null 并报错空指针。

  @transient lazy val 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值