Flink的BroadcastConnectedStream时间水位线异常问题

问题

在使用广播状态时,广播流BroadcastConnectedStream和数据流DataStream(已经设置了以事件时间为时间戳和水位线)connect之后,水位线就消失了Null,数值一直是Long的最小值,导致了后面的累加操作一直没有到窗口时间,没有调用getResult,最后也一直没有输出。

解决方法

在connect之后先做一个基础算子操作让流变回DataStream,再重新设置时间戳和水位线。

直接给BroadcastConnectedStream设置是无效的

broadcastConnectedStream.map((MapFunction<Event, Event>) value -> value)
                .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<Event>(Time.seconds(10)) {
            @Override
            public long extractTimestamp(Event element) {
                try {
                    SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = formatTime.parse(element.capTime);
                    return date.getTime();
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        });

最后,可以看到在修改之后水位线正常了。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值