终于有人将Flink里的addSource,fromSource 说清楚了

addSource 与 fromSource

addSource

<OUT> DataStreamSource<OUT> addSource(SourceFunction<OUT> function) 

1. 实现SouceFunction

2. 对于checkPoint ,savePoint 等情况需要自己实现

3. 常用于自定义的数据源

/**
 * 定义一个每秒输出当前毫秒数的source
 */
public class TimedSource implements SourceFunction<Long>{
    private boolean running = true;
    @Override
    public void run(SourceContext<Long> sourceContext) throws Exception {
        while (running) {
            long ts = System.currentTimeMillis();
            ts = ts - ts % 1000;
            sourceContext.collect(ts);
            Thread.sleep(1000 - ts % 1000);
        }
    }

    @Override
    public void cancel() {
        running = false;
    }
}

使用 addSource 引入TimedSource

StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<Long> streamSource = environment.addSource(new TimedSource());

fromSource

<OUT> DataStreamSource<OUT> fromSource(
            Source<OUT, ?, ?> source,
            WatermarkStrategy<OUT> timestampsAndWatermarks,
            String sourceName)

1. 传入Source ,指定WatermarkStrategy

2. 常见于 Flink-connector

flink-connector-kafka ,

KafkaSource<String> source = KafkaSource.<String>builder()
    .setBootstrapServers(brokers)
    .setTopics("input-topic")
    .setGroupId("my-group")
    .setStartingOffsets(OffsetsInitializer.earliest())
    .setValueOnlyDeserializer(new SimpleStringSchema())
    .build();

env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");

flink-connector-pulsar

PulsarSource<String> source = PulsarSource.builder()
    .setServiceUrl(serviceUrl)
    .setStartCursor(StartCursor.earliest())
    .setTopics("my-topic")
    .setDeserializationSchema(new SimpleStringSchema())
    .setSubscriptionName("my-subscription")
    .build();
env.fromSource(source, WatermarkStrategy.noWatermarks(), "Pulsar Source");

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值