使用Flink Watermark sideOutputLateData的坑_ooobenooo的博客-程序员宝宝

技术标签: Flink  

Flink Watermark是用于处理数据乱序问题,网上已经有很多优秀的文章介绍,这里就不重复了。参考:

https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/event_timestamps_watermarks.html

今天要说的使用Watermark过程中自己挖的坑,使用sideOutputLateData()过程中没有正常输出的问题,在此记录一下:

先来看一下源码解析:

/**
	 * Send late arriving data to the side output identified by the given {@link OutputTag}. Data
	 * is considered late after the watermark has passed the end of the window plus the allowed
	 * lateness set using {@link #allowedLateness(Time)}.
	 *
	 * <p>You can get the stream of late data using
	 * {@link SingleOutputStreamOperator#getSideOutput(OutputTag)} on the
	 * {@link SingleOutputStreamOperator} resulting from the windowed operation
	 * with the same {@link OutputTag}.
	 */
	@PublicEvolving
	public WindowedStream<T, K, W> sideOutputLateData(OutputTag<T> outputTag) {
		Preconditions.checkNotNull(outputTag, "Side output tag must not be null.");
		this.lateDataOutputTag = input.getExecutionEnvironment().clean(outputTag);
		return this;
	}

首先,延迟的数据通过outputTag输出,必须要事件时间大于watermark + allowed lateness,数据才会存储在outputTag中。

然后,注意,坑位来了,调用getSideOutput()方法获取DataStream时,必须调用windowed operation返回的SingleOutputStreamOperator对象才能获取到期望的延迟数据。

总结:

sideOutputLateData() 是一个兜底方案,数据延迟严重,可以保证数据不丢失。

使用第三方类库前还是要先阅读源码,不要凭直觉。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ooobenooo/article/details/106769874

智能推荐

探索springboot中通过bootstrap+thymeleaf实现数据分页_萌了个雪的博客-程序员宝宝_bootstrap+thymeleaf

分页效果展示:详细设计实现:首先在后端自定义一个page工具类public class page { private int currentPage; private int rows; //省略get/set方法,自动补全 }然后在Controller层:// 跳转至用户管理页面 @RequestMapping("/user") public String userPage(ModelMap modelMap,@RequestParam(value = "curren

哈工大软件构造学习心得from 01 静态检查_zm04125的博客-程序员宝宝

01 静态检查冰雹系列定义:从正整数n开始,如果n是偶数,则下一个数是n/2,否则下一个数是3n+1,直到n等于1。Java实现int n = 3;while (n != 1) { System.out.println(n); if (n % 2 == 0) { n = n / 2; } else { n = 3 * n + 1; }}System.out.println(n);Python实现n = 3while n

android .notify,GitHub - Karn/notify: Simplified notification construction and delivery for Android._胡杀马的博客-程序员宝宝

NotifySimplified notification construction for Android.Notify is a Fluent API for Android notifications which lets you build notifications without worrying how they'll look across devices or API versi...

解决 Ubuntu 18.10 使用较新的独立显卡输出无法初始化图形界面并配置深度学习开发环境_SimonRiley_的博客-程序员宝宝

原文地址:解决 Ubuntu 18.10 使用较新的独立显卡输出无法初始化图形界面并配置深度学习开发环境0x00 配置硬件OS: Ubuntu 18.10Base Board: ASUS WS X299 SAGECPU: Intel Core i9-9820XGPU: NVIDIA GeForce RTX 2080 * 4RAM: 64 G将要安装的软件NVIDIA Driv...

a function-definition is not allowed here before ‘{’ token_做个好男人!的博客-程序员宝宝

在一个函数体内一般不允许定义一个函数。这个问题一般是少个}造成的。检查函数的{}对齐问题可能出在错误提示前面的函数。

显式Intent和隐式Intent的学习_wowow~的博客-程序员宝宝

Intent被称为意图,是程序中各组件间进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。一般用于启动Activity、Service以及发送广播等。Intent根据开启目标组件的方式不同分成两种类型:1.显式Intent2.隐式Intent显式Intent显式Intent 指的是直接指定目标目标组件,如:Intent intent=new Intent(this,SecondActivity.class);startActivity(inte

随便推点

springmvc接收postman为form-data参数是null的解决方法(maven项目)_三宝之莘莘学子的博客-程序员宝宝

1.添加依赖(两个依赖 commons-io 和 commons-fileupload ) &amp;lt;!-- commons-io --&amp;gt;        &amp;lt;dependency&amp;gt;            &amp;lt;groupId&amp;gt;commons-io&amp;lt;/groupId&amp;gt;            &amp;lt;artifactId&amp;gt;commons-io&amp;lt...

应用Yii1.1和PHP5进行敏捷Web开发08_oso_kill的博客-程序员宝宝

第七章:迭代4:用户管理和权限认证在前面很短的时间内,我们完成了大量开发工作。Trackstar应用程序基本功能的基础已经奠定。目前为止,我们已经有能力去管理该项目和其中存在的问题,而这个能力正是Trackstar应用程序需要实现的首要目标。当然,还有许多事在向我们招手。请回顾一下第三章,当时我们介绍这一应用程序的时候,我们将它描述为基于角色的应用程序,它允许建立用户帐号,一旦用户获得

2.关于RT-Thread 移植SPI NRF24L01_☆摔得流行★的博客-程序员宝宝

一、描述我默认你有良好的基础,使用过RT-Thread Studio、CubeMX等软件开发程序,所以文章只会讲解细节,毕竟时代在变化。对于NRF24L01,作为从机与stm32使用SPI协议进行通信,你得先了解写SPI协议,什么是CPOL、CPHA,配置他们有什么用,推荐看下原子哥视频,简单,速度快,最好标准库3.5裸机也写下程序,了解下结构体对相关寄存器的配置,毕竟使用CubeMX或IDE配置实在是太简单了,当然也忘得快。当然你想速成也可以。二、CubeMX或CubeIDE配置程序

H.264概述_武爱敏的博客-程序员宝宝

 我的百科 我的贡献草稿箱百度首页 | 登录    新闻   网页   贴吧   知道   MP3   图片   视频   百科帮助设置 添加到搜藏 返回百度百科首页 编辑词条H.264目录[隐藏]H.

在win10下编译darknet-yolov4-cpu版_lp_oreo的博客-程序员宝宝

这篇博客是在win7下只使用cpu进行推理。使用gpu进行推理的可以参考我的上一篇博客。主要步骤分为:(1) 安装opencv,将其加到环境变量中,并且在vs2015中配置opencv(2)编译darknet_no_gou.sln文件,遇到bug就解决它。编译完之后,你就可以使用darknet进行推理了(3) 编译yolo_cpp_dll_no_gpu.sln和yolo_console_dll.sln文件。先编译前者,然后编译后者。0 安装opencv安装opencv的内容我..

java项目实战应用知识概括_GeorgeLin98的博客-程序员宝宝

java项目实战应用知识概括Jasypt 加密Jmeter(压力测试工具)Jasypt 加密简介:Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1.4,它可与Spring Framework、Hibernate和Acegi Security集成。与项目有关的一位开发者表示,Jasypt

推荐文章

热门文章

相关标签