Scala Flink 1.8中GenericWriteAheadSink和FileCheckpointCommitter的空指针异常

Scala Flink 1.8中GenericWriteAheadSink和FileCheckpointCommitter的空指针异常,scala,apache-flink,Scala,Apache Flink,我正在为Flink实现一个自定义NSQ接收器。我将它作为RichSinkFunction的一个子类使用,但我希望让写前日志实现能够实现额外的数据完整性 使用O'Reilly的WriteAheadSinkExample,我尝试实现我自己的: 包com.wistia.analytics 导入java.net.{InetSocketAddress,SocketAddress} 导入com.github.mitallast.nsq_ 导入org.apache.flink.api.scala.create

我正在为Flink实现一个自定义NSQ接收器。我将它作为RichSinkFunction的一个子类使用,但我希望让写前日志实现能够实现额外的数据完整性

使用O'Reilly的WriteAheadSinkExample,我尝试实现我自己的:

包com.wistia.analytics 导入java.net.{InetSocketAddress,SocketAddress} 导入com.github.mitallast.nsq_ 导入org.apache.flink.api.scala.createTypeInformation 导入java.lang.Iterable 导入java.nio.file.{文件,路径} 导入java.util.UUID 导入org.apache.commons.lang3.StringUtils 导入org.apache.flink.api.common.ExecutionConfig 导入org.apache.flink.streaming.runtime.operators.{CheckpointCommitter,GenericWriteAheadSink} 导入scala.collection.mutable 类WALNsqSinkval主题:字符串扩展了GenericWriteAheadLink[String] //CheckpointCommitter,将检查点提交到本地文件系统 新文件CheckpointCommitterSystem.getPropertyjava.io.tmpdir, //记录序列化程序 createTypeInformation[字符串] .createSerializerNewExecutionConfig, //检查点提交者使用的随机作业ID UUID.randomUUID.toString{ var客户端:NSQClient=_ var生产者:NSQProducer=_ 覆盖def打开:装置={ val查找=新的NSQLookup{ def节点:列表[SocketAddress]=Listnew-InetSocketAddress127.0.0.14150 def lookuptopic:String:List[SocketAddress]=Listnew inetsocketaddress 127.0.0.14150 } 客户端=NSQClientlookup producer=client.producer } def sendValuesreadings:Iterable[String],检查点ID:Long,时间戳:Long:Boolean={ val arr=可变序列 readings.forEach{reading=> arr:+阅读 } producer.mpubStrtopic=topic,data=arr 符合事实的 } } 在类的底部重用FileCheckpointCommitter,但我在GenericWriteHeadsink中得到一个空指针异常:

线程主org.apache.flink.runtime.client.JobExecutionException中出现异常:作业执行失败。 位于org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResultJobResult.java:146 位于org.apache.flink.runtime.minicluster.minicluster.executeJobBlockingMiniCluster.java:638 位于org.apache.flink.streaming.api.environment.LocalStreamEnvironment.executeLocalStreamEnvironment.java:123 位于org.apache.flink.streaming.api.scala.StreamExecutionEnvironment.executeStreamExecutionEnvironment.scala:654 在com.wistia.analytics.NsqProcessor$.mainNsqProcessor.scala:24 位于com.wistia.analytics.NsqProcessor.mainNsqProcessor.scala 原因:java.lang.NullPointerException 位于org.apache.flink.streaming.runtime.operators.GenericWriteAheadSink.processElementGenericWriteAheadSink.java:277 位于org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInputStreamInputProcessor.java:202 位于org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.runOneInputStreamTask.java:105 位于org.apache.flink.streaming.runtime.tasks.StreamTask.invokeStreamTask.java:300 位于org.apache.flink.runtime.taskmanager.Task.runTask.java:711 java:748 从运行程序返回的非零退出代码:1 编译/运行从运行程序返回的非零退出代码:1 总时间:45秒,完成时间:2020年2月10日下午6:41:06
我不知道从这里到哪里去。任何值得赞赏的帮助

这里的问题肯定是您从未调用超类的开放方法。这将导致某些变量未初始化。 这应该通过在open方法中调用super.open来解决