java运行flink代码_Java Flink外部源代码

我想要一个并行Flink源,它从内存阻塞队列中消耗。我的想法是让应用程序将元素推送到这个队列中,然后Flink pipeline 使用并处理它们。

对此,最佳模式是什么?我看过一些Flink源代码实现(如Kafka、RabbitMQ等),它们都在初始化源实例中所需的 join。我不能这样做(即从每个源实例中初始化队列),因为

每个源实例实例都将创建自己的队列。

目前,我提出了以下建议,但是静态队列的使用对我来说并不合适。

1每个Flink源实例从中获取其元素的队列。

public class TheQueue implements Serializable {

private static final Logger LOGGER = LoggerFactory.getLogger(TheQueue.class);

private transient static final BlockingQueue<Object> OBJECT_QUEUE = new LinkedBlockingQueue<>();

public static SerializableSupplier<Object> getObjectConsumer() {

return () -> {

return OBJECT_QUEUE.take();

}

};

}

2我的 Flink pipeline 节选。

final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();

env.setParallelism(10);

env.addSource(TestParallelSourceFunction.getInstance(TheQueue.getObjectConsumer()))

三。Flink源函数。

public class TestParallelSourceFunction extends RichParallelSourceFunction{

private static final Logger LOGGER = LoggerFactory.getLogger(TestParallelSourceFunction.class);

private SerializableSupplier<T> supplier;

// initialisation code

@Override

public void run(final SourceContext<T> ctx) throws Exception {

LOGGER.info("Starting Flink source.");

isRunning = true;

while (isRunning) {

final T t = supplier.get();

if (t != null) {

ctx.collect(t);

}

}

LOGGER.info("Stopped Flink source.");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值