大家好,我是雷恩Layne,这是《深入浅出flink》系列的第十四篇文章,希望能对您有所收获O(∩_∩)O
场景描述:flink消费分区有三个,其中第一个分区有数据,另外两个分区无数据。消费kafka分区的flink算子并行度为3,三个子任务分别消费kafka的分区,导致Watermark机制失效。场景示意图如下:
模拟场景
场景复现
现在我们模拟事故的场景:
(1)传感器Beans类
// 传感器温度读数的数据类型
public class SensorReading {
// 属性:id,时间戳,温度值
private String id;
private Long timestamp;
private Double temperature;
//必须有空参的构造方法
public SensorReading() {
}
public SensorReading(String id, Long timestamp, Double temperature) {
this.id = id;
this.timestamp = timestamp;
this.temperature = temperature;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public Double getTemperature() {
return temperature;
}
public void setTemperature(Double temperature) {
this.temperature = temperature;
}
@Override
public String toString() {
return "SensorReading{" +
"id='" + id + '\'' +
", timestamp=" + timestamp +
", temperature=" + temperature +
'}';
}
}
(2)业务逻辑代码
public class MyTest {
public static void main(String[] args) throws Exception {
// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)