All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nextbreakpoint.flink.dummies.SampledTemperatureSource Maven / Gradle / Ivy

The newest version!
/*
 * This file is part of Flink Dummies
 * https://github.com/nextbreakpoint/flink-dummies
 */
package com.nextbreakpoint.flink.dummies;

import org.apache.flink.api.connector.source.*;
import org.apache.flink.api.connector.source.lib.util.IteratorSourceEnumerator;
import org.apache.flink.api.connector.source.lib.util.IteratorSourceReader;
import org.apache.flink.core.io.SimpleVersionedSerializer;

import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/*
 * See documentation:
 * https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/sources/
 */
public class SampledTemperatureSource implements Source> {
    private final int parallelism;
    private final int maxCount;
    private final long maxDelay;
    private final List sensors;

    public SampledTemperatureSource(int parallelism, int maxCount, long maxDelay, List sensors) {
        this.parallelism = parallelism;
        this.maxCount = maxCount;
        this.maxDelay = maxDelay;
        this.sensors = Objects.requireNonNull(sensors);
    }

    @Override
    public Boundedness getBoundedness() {
        if (maxCount > 0) {
            return Boundedness.BOUNDED;
        } else {
            return Boundedness.CONTINUOUS_UNBOUNDED;
        }
    }

    @Override
    public SplitEnumerator> createEnumerator(SplitEnumeratorContext splitEnumeratorContext) {
        final List splits = IntStream.range(0, parallelism)
                .mapToObj(index -> new SampledTemperatureSplit(String.valueOf(index), maxCount, maxDelay, sensors))
                .collect(Collectors.toList());
        return new IteratorSourceEnumerator<>(splitEnumeratorContext, splits);
    }

    @Override
    public SplitEnumerator> restoreEnumerator(SplitEnumeratorContext splitEnumeratorContext, Collection checkpoint) {
        return new IteratorSourceEnumerator<>(splitEnumeratorContext, checkpoint);
    }

    @Override
    public SimpleVersionedSerializer getSplitSerializer() {
        return new SampledTemperatureSplitSerializer();
    }

    @Override
    public SimpleVersionedSerializer> getEnumeratorCheckpointSerializer() {
        return new SampledTemperatureSplitCheckpointSerializer();
    }

    @Override
    public SourceReader createReader(SourceReaderContext sourceReaderContext) {
        return new IteratorSourceReader<>(sourceReaderContext);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy