cette première question;

Je veux apprendre le comportement du temps de la fenêtre. Supposons que je traite des données toutes les 2 secondes avec le Processing time, et l'heure actuelle est 10:26:25.169. À ce moment-là, j'ai déployé le travail.

Dans ce cas, chaque fenêtre de temps sera-t-elle arrondi à 0, 2, 4 et ainsi de suite? Comme ci-dessous;

  • 10:26:24.000 - 10:26:26.000
  • 10:26:26.000 - 10:26:28.000

Comme vous pouvez le constater, j'ai déployé des tâches à 10:26:25.169, mais FLINK a fait une fenêtre ronde de 2 secondes. Est-ce correct?

Sinon, Windows fonctionne-t-elle comme ci-dessous?

  • 10:26:25.169 - 10:26:27.169
  • 10:26:27.169 - 10:26:29.169

Lequel est vrai? Ce comportement peut-il changer lorsque j'utilise event time au lieu de processing time?

la deuxième question;

Je veux garder l'état pour chaque clé. Pour cela, je peux utiliser la fonction RICHFLATMAP ou le type de propriété clés. Mais je me demande que je puisse gérer l'état à l'aide de fonctions ci-dessus après une fenêtre appliquée? Par example;

// in this case i can manage state by key
ds.keyBy(_.field).process(new MyStateFunction)

// in this case, can i manage state after window for the same key? 
ds.keyBy(keyExtractorWithTime)
  .window(new MyWindowFunction)
  .reduce(new myRedisFunction)
  .process(new MyStateFunction)
0
test-big 1 mai 2021 à 13:52

1 réponse

Meilleure réponse

En ce qui concerne la première question, il sera toujours complet de 2 secondes arrondi, donc fondamentalement que vous avez décrit:

10:26:24.000 - 10:26:26.000
10:26:26.000 - 10:26:28.000

Il y a un argument offset qui vous permet de contrôler ce comportement dans une certaine mesure. Mais fondamentalement, tandis que la pliale crée réellement la fenêtre lorsque les données arrivent, le startTime et endTime ne dépendent pas de l'arrivée de la fenêtre, les données ne correspondent pas à la fenêtre.

Plus d'informations peuvent être trouvées ici

Comme pour la deuxième question, la fonction ProcessWindowFunction est une fonction clé et vous pourrez ainsi utiliser l'état clé à l'intérieur de la fonction, comme vous le feriez en mesure de le faire en standard ProcessFunction.

1
Dominik Wosiński 1 mai 2021 à 11:32