自定义datasink上的cant initialize字段(flink cep)

qlzsbp2j  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(325)

我对ApacheFlink流api有问题。
我可以用一个定制的数据源来设置整个cep环境,当在该数据源上使用标准的接收器(如“print()”)时,一切都正常。
这就是我的Flume现在的样子:

@RequiredArgsConstructor
public class EventDataConsumer extends RichSinkFunction<EventData>{

private final transient Consumer<EventData> consumer;

    @Override
    public void invoke(EventData eventData) throws Exception {
        consumer.accept(eventData);
    }
}

我试图实现的是,向这个函数传递一个方法引用,这个函数将针对我的数据流中的每个元素执行。
以下是初始化函数的方法:

EventDataConsumer consumer = new EventDataConsumer(someService::handleEventData);
outStream.addSink(consumer);

我的问题是,当我在自定义接收器的“invoke”方法中设置断点时,即使我显式调用构造函数(该构造函数分配使用者),使用者看起来也是空的。

nhhxz33t

nhhxz33t1#

由于sink被分发到与sink的并行性一样多的示例,因此它应该是可序列化的。在集群上执行时 Sink 已连续发送到 TaskManagers 反序列化的位置。
在你的例子中 consumer 字段是 transient ,这就是为什么在序列化之后 null .

相关问题