我对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”方法中设置断点时,即使我显式调用构造函数(该构造函数分配使用者),使用者看起来也是空的。
1条答案
按热度按时间nhhxz33t1#
由于sink被分发到与sink的并行性一样多的示例,因此它应该是可序列化的。在集群上执行时
Sink
已连续发送到TaskManagers
反序列化的位置。在你的例子中
consumer
字段是transient
,这就是为什么在序列化之后null
.