Quelle est la meilleure façon de mettre à jour le manuel d'état dans Apache Flink?

Kanjie Lu:

J'utilise Apache Flink dans un projet de marché boursier pour calculer la variation des prix en cours. La formule est

 price_change = (current_price - previous_close_price) / previous_close_price

previous_close_priceest un cours de clôture de sécurité à la veille de la négociation. Tous les jours avant l'ouverture du marché, je dois mettre à jour previous_close_price.

Maintenant, je suis venu avec plusieurs solutions, mais je ne sais pas lequel est le meilleur.

  1. Stocker previous_close_pricedans Redis et aller chercher le prix dans tous les calculs. Il est facile et flexible pour mettre à jour le prix , mais cette solution pourrait tuer la performance.

  2. Réglez le TTL de l'état 1 jour. Obtenez le nouvel état lorsque l'ancien état est expiré. Mais ce n'est pas flexible que le TTL est codé en dur.

  3. Motif de diffusion État . Je ne sais pas si cette solution fonctionne.

  4. Envoyer un message spécial à Flink. Lorsque Flink reçoit le message, il met à jour la previous_close_price.

Toutes les suggestions sont appreicated.

David Anderson:

Je suggère une variante # 4:

Avoir deux sources, l'une utilisée uniquement pour les cours de clôture, et l'autre pour le flux des transactions. Clés les deux cours d'eau par la sécurité, et les connecter avec un CoProcessFunction. Stocker le previous_close_price dans l'état clé, dans le CoProcessFunction.

Chaque jour, avant l'ouverture du marché, flux dans les cours de clôture mis à jour.

Cela pourrait se faire avec un RichCoFlatMap, mais je suggère un CoProcessFunction parce que vous pouvez utiliser une sortie latérale pour les erreurs de rapport (par exemple les titres dont la previous_close_price est manquante).

En ce qui concerne les autres approches:

  1. Je ne vois aucun avantage à garder les données previous_close_price dans un magasin de données externe.
  2. Je ne pense pas que cela fonctionne très bien. Il n'y a pas de crochet disponible pour déclencher le chargement des nouvelles données, et d'ailleurs, l'Etat ne sera effacé quand il est accessible.
  3. Cela ne se sent pas comme un cas de bonne utilisation pour l'état de diffusion, à moins qu'il ya un besoin pour tout le monde dans le cluster de connaître les cours de clôture pour tous les titres.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=206402&siteId=1
conseillé
Classement