Flink de l'entrée au vrai parfum (14, Flink connaissances essentielles-filigrane)

Pour Flink, le filigrane est un concept difficile à contourner. Certains sont traduits par des filigranes et d'autres par des filigranes. C'est la même chose.

Le filigrane est un mécanisme permettant de mesurer la progression de l'heure de l'événement. C'est un attribut caché des données elles-mêmes. Généralement basé sur les données de l'heure de l'événement, il contient un horodatage. Le filigrane est utilisé pour gérer les événements dans le désordre, et la gestion correcte des événements dans le désordre est généralement réalisée en combinant le mécanisme de filigrane avec la fenêtre.

Le traitement de flux a un processus et un temps allant de la génération de l'événement au flux via la source, puis à l'opérateur. Bien que dans la plupart des cas, les données circulant vers l'opérateur interviennent dans la séquence temporelle de l'événement, cela n'exclut pas l'élément hors service ou en retard dû au réseau, à la contre-pression et à d'autres raisons. .

Mais pour l'élément tardif, on ne peut pas attendre indéfiniment, il doit y avoir un mécanisme pour s'assurer qu'après un certain temps, la fenêtre doit être déclenchée pour effectuer des calculs. Ce mécanisme spécial est le filigrane.

Le plus grand effet de la définition du filigrane est en fait de résoudre le problème du désordre des données

Supposons qu'il y ait un train à 10 minutes, à 8 heures et à 8h10. Après avoir défini le filigrane, tous les trains à 8 heures seront effectivement envoyés à 8h10 et le retard sera automatiquement défini

Caractéristiques du filigrane

Prenez l'horodatage maximal actuel et soustrayez le délai fixe comme horodatage du filigrane,
ce qui signifie que chaque élément de données sera calculé et que la plus grande valeur de toutes les données sera soustraite du délai fixe

La compréhension personnelle n'est pas nécessairement correcte: prenez ceci comme exemple: le filigrane est 2, lorsque vous voyez 5, le filigrane est 5-2 = 3, en supposant que le seau est défini sur 4, alors le seau 0-4 ne sera pas fermé, continuez vers le bas prendre le
numéro suivant 3, ou 5 nombre maximum de découverts que 5-2 = 3,0-4 seau ne bougeait pas quand on marchait 6, quand le maximum est 6, alors 6-2 = 4, cette fois 0- La tranche de 4 sera désactivée, et ainsi de suite. Le
Flink de l'entrée au vrai parfum (14, Flink connaissances essentielles-filigrane)
filigrane est un enregistrement de données spécial. Le
filigrane doit être augmenté de manière monotone pour garantir que l'horloge de l'événement de la tâche avance plutôt que vers l'arrière. Le
filigrane est lié à l'horodatage des données.

passe de filigrane

Lorsque l'amont est passé à l'aval, le filigrane sera diffusé. L'
aval peut recevoir plusieurs données de filigrane en amont, et un filigrane partitionné sera établi en interne. Les plus petites données seront utilisées comme filigrane final. Par
exemple, il y a 3 sources de données en amont et la sortie Les filigranes sont 4, 3 et 5, puis les 3 données seront reçues en aval et la sortie finale est le plus petit filigrane, qui est 3

Dans l'exemple suivant, il y a 4 données en amont, le filigrane est divisé en 4, 7, 6, 6 et les données de filigrane de données de partition sont 2, 4, 3, 6. La
première image: lorsque les données en amont 1, 2 et 3 sont toutes Lorsqu'elle ne vient pas, la plus petite donnée de toutes les partitions est 2, donc l'heure et l'heure de l'événement en cours de sortie sont 2. La
deuxième image: Les premières données de l'amont sont arrivées, c'est-à-dire que les 4 données écrasent les 2 d'origine et les données deviennent La plus petite donnée de 4, 4, 3, 6 devient 3, donc l'heure de l'événement courant de sortie est 3. La
troisième image: La deuxième donnée 7 en amont arrive, c'est-à-dire que 7 couvre l'original 4, et les données changent à ce moment Il devient 4, 7, 3, 6 et la plus petite donnée est toujours 3, donc la sortie de l'heure de l'événement actuel est toujours 3. La
quatrième image: La troisième donnée 6 en amont arrive, c'est-à-dire que 6 couvre 3, et les données deviennent 4, 7, 6, 6 La plus petite donnée devient 4, donc l'heure de l'événement courant de sortie est 4
Flink de l'entrée au vrai parfum (14, Flink connaissances essentielles-filigrane)

Introduction du filigrane

L'utilisation de l'heure d'événement doit spécifier l'horodatage dans la source de données,
appeler la méthode assignTimestampAndWatermarks, passer un BoundedOutOfOrdernessTimestampExtractor, vous pouvez spécifier le filigrane

//先转换成样例类类型
    val dataStream = inputStream
      .map(data => {
        val arr = data.split(",") //按照,分割数据,获取结果
        SensorReadingTest5(arr(0), arr(1).toLong, arr(2).toDouble) //生成一个传感器类的数据,参数中传toLong和toDouble是因为默认分割后是字符串类别
      })
//      .assignAscendingTimestamps(_.timestamp ) //这种是当时间肯定是按照时间排序的,没有乱序的情况,升序提取时间戳(如果数据中timestamp为秒,可以*1000L转为毫秒)
      .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[SensorReadingTest5](Time.seconds(3)) {  // 指定乱序最大等3
        override def extractTimestamp(t: SensorReadingTest5): Long = t.timestamp * 1000L //指定watermark的字段
      })

paramètre de filigrane

Dans Flink, le filigrane est généré par le développeur de l'application, ce qui nécessite généralement une certaine compréhension du champ correspondant.
Si le délai de réglage du filigrane est trop long, la vitesse de réception du résultat peut être très lente. La solution consiste à sortir avant l'arrivée de la marque d'eau. Résultat approximatif
. Si le filigrane arrive trop tôt, vous risquez de recevoir un résultat incorrect, mais le mécanisme de traitement flink des données tardives peut résoudre ce problème

Filigranes périodiques (avec filigranes périodiques)

AssignerWithPeriodicWatermarks alloue périodiquement l'horodatage et génère un filigrane (peut dépendre de l'élément ou purement basé sur le temps de traitement).
L'intervalle des événements (toutes les n millisecondes) généré par le filigrane est défini par ExecutionConfig.setAutoWatermarkInterval (...). Chaque fois que la méthode getCurrentWatermark () de l'allocateur est appelée, si le filigrane renvoyé est non vide et supérieur au filigrane précédent, un Le nouveau filigrane sera lancé.

Assigner avec des filigranes ponctués

Le filigrane est généré par intermittence. Contrairement au tatouage périodique, cette méthode n'est pas à durée fixe, mais peut filtrer et traiter chaque élément de données selon les besoins

Pour le traitement des données dans le désordre, flink fournit trois niveaux de garantie
1. Filigrane: vous pouvez définir une cale plus petite pour vivre dans la plupart des situations et fournir des résultats approximativement corrects
2. AllowedLateness (Time.minutes (1)) // permet le traitement des données en retard pendant 1 minute
3. .sideOutputLateData (new OutputTag (String, Double, Long) ) // Flux de sortie latéral, première sortie vers un contournement, étiquetez-le pour vous assurer que les données ne seront pas perdues

Je suppose que tu aimes

Origine blog.51cto.com/mapengfei/2554654
conseillé
Classement