Flink自定义Source:SourceFunction、ParallelSourceFunction、RichParallelSourceFunction

我们这里讲这三类自定义Source
SourceFunction、ParallelSourceFunction、RichParallelSourceFunction
先定义一个Class类,分别集成上面三个接口,实现里面方法

package com.ruozedata.flink

import org.apache.flink.streaming.api.functions.source.SourceFunction

//依次extends成SourceFunction、ParallelSourceFunction、RichParallelSourceFunction
class CustomerSource extends SourceFunction[Long]{
   

  var count=0L
  var isRunning=true
  override def run(ctx: SourceFunction
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用 Java 中的线程池来实现 Flink 的自定义 source function 产生数据流。具体步骤如下: 1. 实现一个实现了 Runnable 接口的数据生成类,该类可以在 run 方法中产生数据,并将数据发送到 Flinksource context 中。 ```java public class DataSource implements Runnable { private final SourceContext<String> context; private final int delay; public DataSource(SourceContext<String> context, int delay) { this.context = context; this.delay = delay; } @Override public void run() { while (true) { // 产生数据 String data = "data-" + UUID.randomUUID().toString(); // 发送数据到 Flinksource context 中 context.collect(data); // 休眠指定时间 try { Thread.sleep(delay); } catch (InterruptedException e) { // ignore } } } } ``` 2. 在自定义 source function 中创建线程池,并在 open 方法中启动线程池,每个线程都运行数据生成类的实例。 ```java public class ThreadPoolSourceFunction extends RichSourceFunction<String> { private transient ExecutorService executorService; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); // 创建线程池 executorService = Executors.newFixedThreadPool(5); // 启动线程池 for (int i = 0; i < 5; i++) { executorService.submit(new DataSource(getSourceContext(), 1000)); } } @Override public void run(SourceContext<String> ctx) throws Exception { // do nothing } @Override public void cancel() { // do nothing } @Override public void close() throws Exception { super.close(); // 关闭线程池 executorService.shutdownNow(); } } ``` 在上面的例子中,我们创建了一个固定大小为 5 的线程池,并将数据生成类的实例提交到线程池中运行。每个数据生成类实例都会在 run 方法中产生数据,并将数据发送到 Flinksource context 中。由于每个数据生成类实例都是在一个独立的线程中运行,因此可以实现并行产生数据的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值