【深入浅出flink】第14篇:kafka分区数与flink算子并行度导致Watermark不触发问题,大多数大数据开发者都会遇到的问题

本文深入分析了在Flink消费Kafka时,因Kafka分区数与Flink算子并行度不匹配导致Watermark机制失效的问题。通过模拟场景和现象描述,揭示了当部分Kafka分区无数据时,Flink的Watermark无法正确传递,进而影响窗口计算。文章提出了两种解决方案,包括调整并行度和重分区,以确保每个带有Watermark的子任务都能接收到数据,从而正常触发Watermark机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是雷恩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)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷恩Layne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值