簡體   English   中英

Flink:如何在滑動窗口中僅處理窗口函數中的特定鍵

[英]Flink: How to only process specific key in window function in sliding window

我有一個處理Metric(name, type, timestamp, value)對象的 flink 作業。 指標是keyby(名稱、類型、時間戳)。 我正在嘗試使用特定timestamp開始timestamp + 50 second處理指標。 每個時間戳都有 10 秒的間隔。 我目前正在嘗試使用ProcessWindowFunction window(SlidingEventTimeWindows.of(Time.seconds(50), Time.seconds(10)))

 @Override
 public void process(Tuple3<String, Integer, Long> key, Context context, Iterable<Metric> input, Collector<Metric> collector) {
  long windowStartTime = context.window().getStart();
  long timestamp = key.f2;
  if (windowStartTime <= timestamp < windowStartTime + 10second) {
     collector.out(input.iterator().next()). //to some reducer
} 

但是,我只能獲得第一波輸出並在之后停止接收東西。 我還嘗試在 Metric 中添加一個isProcessed字段並在 reducer 函數中進行標記並應用 Evictor 但似乎不起作用。

source 和 sink 是 kafka 的消費者和生產者。 我也有水印設置

.assignTimestampsAndWatermarks(
            new BoundedOutOfOrdernessTimestampExtractor<Metric>(Time.seconds(50)) {
              @Override
              public long extractTimestamp(Metric metrics) {
                return metrics.getTimestamp() * 1000; // to millisecond
              }
            })

您沒有在每個窗口中獲得更多事件的原因是您在密鑰中包含了時間戳。 這具有強制每個窗口僅包含所有具有相同時間戳的事件的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM