Flink流处理时间方式

  • EventTime

    时间发生的时间,例如:点击网站上的某个链接的时间

  • IngestionTime

    某个Flink节点的source operator接收到数据的时间,例如:某个source消费到kafka中的数据

  • ProcessingTime

    某个Flink节点执行某个operation的时间,例如:timeWindow接收到数据的时间

 
 

设置Flink流处理的时间类型

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

问题

1. 使用时间窗口来统计10分钟内的用户流量

2. 有一个时间窗口

  • 开始时间为:2017-03-19 10:00:00
  • 结束时间为:2017-03-19 10:10:00

3. 有一个数据,因为网络延迟

  • 事件发生的时间为:2017-03-19 10: 10 :00
  • 秒中

4. 时间窗口并没有将 59 这个数据计算进来,导致数据统计不正确

这种处理方式,根据消息进入到window时间,来进行计算。在网络有延迟的时候,会引起计算误差。

 
 

水印(watermark)

水印就是一个时间戳,可以给每个消息添加一个 允许一定延迟 的时间戳

  • 窗口可以继续计算一定时间范围内延迟的消息
  • 添加水印后,窗口会等 5 秒,再执行计算。若超过5秒,则舍弃。
  • 窗口执行计算时间由 水印时间 来触发,当接收到消息的 watermark >= endtime ,触发计算

     
     

 
 

Flink提供添加水印的API

        val watermarkData: DataStream[Message] =

        clicklogDataStream.assignTimestampsAndWatermarks(new AssignerWithPeriodicWatermarks[Message]

        {

           var currentTimestamp: Long = 0L

           val maxDelayTime = 5000L

           var watermark: Watermark = null

        // 获取当前的水印

           override def getCurrentWatermark = {

            watermark = new Watermark(currentTimestamp - maxDelayTime)

            watermark

          }

           // 时间戳抽取操作

           override def extractTimestamp(t: Message, l: Long) = {

            val timeStamp = t.timestamp

            currentTimestamp = Math.max(timeStamp, currentTimestamp)

            currentTimestamp

          }

         })

 
 

 
 

Flink水印机制(watermark)的更多相关文章

  1. 一文搞懂Flink Window机制

    Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...

  2. 自定义View 水印布局 WaterMark 前景色 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Flink 源码解析 —— 深度解析 Flink 序列化机制

    Flink 序列化机制 https://t.zsxq.com/JaQfeMf 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭 ...

  4. flink time and watermark

    流处理中时间本质上就是一个普通的递增字段(long型,自1970年算起的微秒数),不一定真的表示时间. watermark只是应对乱序的办法之一,大多是启发式的,在延迟和完整性之间抉择.(如果没有延迟 ...

  5. 老板让阿粉学习 flink 中的 Watermark,现在他出教程了

    1 前言 在时间 Time 那一篇中,介绍了三种时间概念 Event.Ingestin 和 Process, 其中还简单介绍了乱序 Event Time 事件和它的解决方案 Watermark 水位线 ...

  6. 一张图说清楚Flink水印和Lateness

    真传一句话,假言万卷书. Flink使用窗口与水印处理乱序问题,使用Latenss处理延迟问题,二者混合使用可以满足很多复杂场景的需求 当Watermark大于窗口结束时间时,会触发窗口内的元素进行计 ...

  7. Flink window机制

    此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 问题 window是解决流计算中的什么问题? 怎么划分window?有哪几种window?window与时间属 ...

  8. Flink容错机制

    Flink的Fault Tolerance,是在在Chandy Lamport Algorithm的基础上扩展实现了一套分布式Checkpointing机制,这个机制在论文"Lightwei ...

  9. Flink容错机制(checkpoint)

    checkpoint是Flink容错的核心机制.它可以定期地将各个Operator处理的数据进行快照存储( Snapshot ).如果Flink程序出现宕机,可以重新从这些快照中恢复数据. 1. ch ...

随机推荐

  1. Emacs中的前进后退jump-tree

    Emacs中的前进后退jump-tree */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #8394 ...

  2. #python# error:http.client.RemoteDisconnected: Remote end closed connection without response

    添加headers user-agent 网络情况不好的状态下也能出现

  3. centos7 nginx完整支持thinkphp pathinfo模式开启方法

    thinkphp运行在linux+nginx,如何开启pathinfo模式,我是完整测试过了,没问题的,在thinkphp配置文件 开启    'URL_MODEL'   =>  1,   1代 ...

  4. ecshop 广告调用的几种方式

    1,ECSHOP后台设置广告更换 前台调用 {insert name='ads' id=2 num=1} id值表达广告位置的id.num表示数量 2,在代码加函数 function getads($ ...

  5. opencv保存图片路径包含中文乱码解决方案

    # coding: utf-8 import numpy as np import cv2 img = cv2.imread('1.jpg',1) cv2.imshow('image', img) k ...

  6. AI-IBM-cognitive class --Liner Regression

    Liner Regression import matplotlib.pyplot as plt import pandas as pd import pylab as pl import numpy ...

  7. openstack stein部署手册 1. 准备

    # 控制节点与计算节点,分别指定静态解析 /etc/hosts 192.168.123.201 controller 192.168.123.202 compute01 # 控制节点与计算节点,分别安 ...

  8. rpmgraph - 显示 RPM 软件包依赖关系图

    SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...

  9. Codeforces 722E 组合数学 DP

    题意:有一个n * m的棋盘,你初始在点(1, 1),你需要去点(n, m).你初始有s分,在这个棋盘上有k个点,经过一次这个点分数就会变为s / 2(向上取整),问从起点到终点的分数的数学期望是多少 ...

  10. AngularJs双向绑定

    模型数据(Data) 模型是从AngularJS作用域对象的属性引申的.模型中的数据可能是Javascript对象.数组或基本类型,这都不重要,重要的是,他们都属于AngularJS作用域对象. An ...