Tony Wang
02/06/2023, 5:59 PMenv.getConfig().setGlobalJobParameters(params);
env.setRuntimeMode(RuntimeExecutionMode.STREAMING);
env.setParallelism(1);
String path = "/home/ubuntu/flink/flink-examples/flink-examples-streaming/target/csv";
final CsvReaderFormat<Pojo> format = CsvReaderFormat.forPojo(Pojo.class);
File csvfile = new File(path);
final FileSource<Pojo> csv_source =
FileSource.forRecordStreamFormat(format, Path.fromLocalFile(csvfile)).
monitorContinuously(Duration.ofMillis(1)).build();
DataStream<Pojo> source = env.fromSource(
csv_source,
new WatermarkStrategy<Pojo>() {
@Override
public WatermarkGenerator<Pojo> createWatermarkGenerator(
WatermarkGeneratorSupplier.Context context) {
return new MyPerElementWatermarkGenerator();
}
}
.withTimestampAssigner((event, timestamp) -> event.event_time), "csv-source");David Anderson
02/06/2023, 6:35 PMMyPerElementWatermarkGenerator look like?Tony Wang
02/06/2023, 6:36 PM@Internal
public static class MyPerElementWatermarkGenerator implements WatermarkGenerator<Pojo> {
private long maxTimestamp;
public MyPerElementWatermarkGenerator() {
maxTimestamp = Long.MIN_VALUE;
}
@Override
public void onEvent(Pojo event, long eventTimestamp, WatermarkOutput output) {
// if (eventTimestamp > maxTimestamp) {
// maxTimestamp = eventTimestamp;
// output.emitWatermark(new Watermark(maxTimestamp));
// }
if (event.event_time > maxTimestamp)
{
maxTimestamp = event.event_time;
}
LOG.debug("maxTimestamp: " + maxTimestamp);
output.emitWatermark(new Watermark(maxTimestamp));
}
@Override
public void onPeriodicEmit(WatermarkOutput output) {}
// public WatermarkGeneratorSupplier<Pojo> getSupplier() {
// return (ctx) -> new MyPerElementWatermarkGenerator();
// }
}Tony Wang
02/06/2023, 6:57 PM