flink 中window的開窗開始時間、結束時間講解
一、原始碼展示:
可以看到計算公式如下
/**
* Method to get the window start for a timestamp.
*
* @param timestamp epoch millisecond to get the window start.
* @param offset The offset which window start would be shifted by.
* @param windowSize The size of the generated windows.
* @return window start
*/
public static long getWindowStartWithOffset(long timestamp, long offset, long windowSize) {
return timestamp - (timestamp - offset + windowSize) % windowSize;
}
二、程式碼測試:
import java.time.Duration
import org.apache.flink.api.common.eventtime.{SerializableTimestampAssigner, WatermarkStrategy}
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
// 定義樣例類,溫度感測器
case class SensorReading(id: String,timeStamp: Long,temperature: Double)
object WindowTest {
def main(args: Array[String]): Unit = {
// 獲取執行環境
val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
// 設定全域性的並行度為1,方便測試
environment.setParallelism(1)
// 設定時間語義為事件時間
environment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
// 從socket中獲取資料
val inputStream2: DataStream[String] = environment.socketTextStream("centos7-1", 4444)
// 將源資料轉換成樣例類型別,設定waterMark延遲時間和事件時間欄位
val dataStream: DataStream[SensorReading] = inputStream2.map(data => {
val arr = data.split(",")
SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
}).assignTimestampsAndWatermarks(WatermarkStrategy.forBoundedOutOfOrderness[SensorReading](Duration.ofSeconds(3))
.withTimestampAssigner(new SerializableTimestampAssigner[SensorReading] {
override def extractTimestamp(element: SensorReading, recordTimestamp: Long): Long = element.timeStamp * 1000L
}))
// 建立側輸出流
val latetag = new OutputTag[(String, Double, Long)]("late")
// 每15秒統計一次,視窗內各感測器所有溫度的最小值,以及最新的時間戳
val resultStream: DataStream[(String, Double, Long)] = dataStream
.map(data => (data.id, data.temperature, data.timeStamp))
.keyBy(_._1) // 根據id分組
.timeWindow(Time.seconds(15)) // 時間滾動視窗,視窗大小15秒
.allowedLateness(Time.minutes(1)) // 允許處理遲到的資料
.sideOutputLateData(latetag) // 將遲到的資料放入側輸出流
.reduce(
// (String, Double, Long) id,最小溫度,最新時間戳
(currRes, newDate) => (currRes._1, currRes._2.min(newDate._2), newDate._3)
)
resultStream.getSideOutput(latetag).print("late")
resultStream.print("window result")
// 執行
environment.execute("window test")
}
}
測試開窗開始時間:
第一條資料時間戳減去4秒就是195開始
相關文章
- MySQL如何獲取binlog的開始時間和結束時間MySql
- PHP獲取當前季度的開始時間和結束時間PHP
- MySQL如何快速獲取binlog的開始時間和結束時間MySql
- 使用 Element+vue實現開始時間結束時間限制Vue
- 查詢時若時間為空,開始時間取今天的零點,結束時間取當前時間
- elementUI中日期選擇器,控制開始時間小於結束時間UI
- 第08講:Flink 視窗、時間和水印
- Laravel admin 如何生成 開始時間和結束時間範圍之內的篩選條件 (2 個欄位)Laravel
- LOL2018全年幸運召喚師活動時間表 每個月活動開始結束時間彙總WX
- 泛微oa流程表單之請假單(判斷請假結束時間不能小於等於請假開始時間)
- Flink 的時間型別型別
- php 獲取今日、昨日、上週、本月的起始時間戳和結束時間PHP時間戳
- go-carbon 1.4.0 版本釋出,新增獲取世紀和季度開始和結束時間方法Go
- 直播電商原始碼,活動開始時間計時器原始碼
- 3.MongoDB恢復探究:為什麼oplogReplay引數只設定了日誌應用結束時間oplogLimit,而沒有設定開始時間?MongoDBMIT
- Flink基礎:時間和水印
- PHP獲取當月起始和結束時間戳PHP時間戳
- azkaban執行任務長時間無法結束
- 遊戲開發中不同時區下的時間問題遊戲開發
- 從0開始學遊戲開發-蔡能-極客時間遊戲開發
- [譯] 從零開始,在 Redux 中構建時間旅行式除錯Redux除錯
- Excel中時間戳轉換時間Excel時間戳
- 微軟開始彈窗提醒Windows 7即將結束支援微軟Windows
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- 事件溯源中的時間和時間建模 - Tomasz Jaskula事件
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- webpack 從開始到結束Web
- APP定製開發時間APP
- Python中的時間處理大總結Python
- 從0開始學架構-李運華-極客時間架構
- 從0開始學大資料-李智慧-極客時間大資料
- 從0開始學微服務-胡忠想-極客時間微服務
- 學校的具體開學時間
- 獲取時間戳,幾個時間點的時間戳時間戳
- 掌握時間與空間:深入探討Golang中的時間戳與時區轉換Golang時間戳
- MySQL時間戳、時間MySql時間戳
- win10 怎麼查開機時間_win10檢視開關機時間的方法Win10
- Android程式中的時間Android