Explication détaillée des flux RocketMQ

1. Présentation des flux RocketMQ

RocketMQ Streams est un moteur de calcul de flux léger basé sur RocketMQ. Les applications peuvent s'appuyer sur lui sous la forme d'un SDK, et les capacités de calcul de flux peuvent être obtenues sans déployer un serveur de calcul de flux complexe. Par conséquent, il présente les caractéristiques d’une faible consommation de ressources, d’une bonne évolutivité et prend en charge les opérateurs de calcul de flux riches.

1, cadre chiropratique

Architecture globale

Les données sont consommées depuis RocketMQ par les flux RocketMQ, traitées et finalement réécrites dans RocketMQ.

Architecture globale

Les données sont consommées par RocketMQ Consumer et entrent dans la topologie de traitement pour être traitées par l'opérateur. Si la tâche de traitement de flux contient l'opérateur keyBy, les données doivent être regroupées en fonction de la clé et les données groupées sont écrites dans le sujet de lecture aléatoire. Les opérateurs suivants sont consommés à partir du sujet de lecture aléatoire. Si des opérateurs avec état tels que count sont également impliqués, alors le sujet d'état doit être lu et écrit pendant le calcul. Une fois le calcul terminé, le résultat est réécrit dans RocketMQ.

2, modèle de consommation

img_2.png

Les instances informatiques sont essentiellement des clients qui s'appuient sur le SDK Rocket-streams. Par conséquent, le MQ consommé par les instances informatiques dépend de l'allocation de rééquilibrage de RocketMQ. Le nombre total d'instances informatiques ne peut pas être supérieur au nombre total de MQ consommés. Sinon, certaines instances informatiques seront être dans un état d'attente. Impossible de consommer des données.

Une instance informatique peut consommer plusieurs MQ, et il n'existe qu'une seule carte de topologie informatique dans une instance.

3、状态

img_3.png

Pour les opérateurs avec état, tels que count, les opérateurs de comptage doivent être regroupés avant de pouvoir être additionnés. L'opérateur de regroupement keyBy réécrira les données dans RocketMQ en fonction de la clé groupée et écrira la même clé sur la même partition (ce processus est appelé shuffle), garantissant que les données contenant la même clé sont consommées par le même consommateur. L'État s'appuie localement sur RocksDB pour accélérer la lecture et s'appuie à distance sur RocketMQ pour la persistance.

4、扩缩性

img.png

Lorsque les instances de calcul sont réduites de 3 à 2, à l'aide de la fonction de rééquilibrage dans le mode de consommation du cluster RocketMQ, le MQ fragmenté consommé sera redistribué entre les instances de calcul. Les MQ2 et MQ3 consommés sur l'instance 1 sont alloués à l'instance 2 et à l'instance 3. Les données d'état de ces deux MQ doivent également être migrées vers l'instance 2 et l'instance 3. Cela implique également que les données d'état sont enregistrées en fonction du MQ de partitionnement des données source ; l'expansion est Juste le processus inverse.

2. Concepts de base des flux RocketMQ

1, modèle de zone

StreamBuilder

img_2.png

  • Une instance StreamBuilder comporte 1 à N pipelines, et le pipeline représente un chemin de traitement des données ;
  • Un pipeline peut contenir de 1 à N nœuds de traitement GroupNode ;
  • Une instance StreamBuilder possède un TopologyBuilder, et TopologyBuilder peut créer un processeur de traitement de données ;
  • Un JobId correspond à une instance StreamBuilder.

RocketMQStream

img_2.png

  • Une instance RocketMQStream dispose d'un générateur de topologie TopologyBuilder ;
  • Une instance RocketMQStream peut instancier 1 à N threads de travail ;
  • Chaque instance de thread WorkerThread contient un moteur ;
  • Un moteur contient toute la logique permettant d'effectuer le traitement des données, y compris une instance consommateur, une instance producteur et une instance StateStore ;

Exemple de traitement de flux

Une instance de traitement de flux représente un processus exécutant RocketMQ Streams ;

  • Une instance de traitement de flux comprend un StreamBuilder, un RocketMQStream, une carte topologique et un ou plusieurs pipelines ;

2、StreamBuilder

  • StreamBuilder(jobId) Créez une instance ;
  • <OUT> RStream<OUT> source(topicName, deserializer) Définir le sujet source et la méthode de désérialisation ;

3、RStream

  • <K> GroupedStream<K, T> keyBy(selectAction) Regrouper par champs spécifiques ;
  • <O> RStream<O> map(mapperAction) Effectuer une transformation individuelle des données ;
  • RStream<T> filter(predictor) Filtrer les données
  • <VR> RStream<T> flatMap(mapper)Effectuer une conversion un-à-plusieurs de données ;
  • <T2> JoinedStream<T, T2> join(rightStream) Rejoindre à double flux ;
  • sink(topicName, serializer) Afficher les résultats sur un sujet spécifique ;

3、GroupedStream

Opérer sur des données contenant la même clé

  • <OUT> GroupedStream<K, Integer> count(selectAction) Comptez le nombre de données contenant un certain champ ;
  • GroupedStream<K, V> min(selectAction) Calculer la valeur minimale d'un certain champ ;
  • GroupedStream<K, V> max(selectAction) Comptez la valeur maximale d'un certain champ ;
  • GroupedStream<K, ? extends Number> sum(selectAction) Calculer la somme des statistiques pour un certain domaine ;
  • GroupedStream<K, V> filter(predictor) Filtrer un certain champ ;
  • <OUT> GroupedStream<K, OUT> map(valueMapperAction) Effectuer une transformation individuelle des données ;
  • <OUT> GroupedStream<K, OUT> aggregate(accumulator) Effectuez des opérations d'agrégation sur les données, et l'agrégation prend en charge l'agrégation de second ordre, comme l'ajout de données lorsque la fenêtre n'est pas déclenchée et le calcul du résultat lorsque la fenêtre est déclenchée ;
  • WindowStream<K, V> window(windowInfo) Définir la fenêtre ;
  • GroupedStream<K, V> addGraphNode(name, supplier) L'interface sous-jacente ajoute des opérateurs personnalisés à la topologie de traitement de flux ;
  • RStream<V> toRStream() La conversion en RStream n'est qu'une conversion sous forme d'interface sans aucune opération sur les données ;
  • sink(topicName, serializer) Écrivez les résultats dans le sujet selon le formulaire de sérialisation personnalisé ;

4、WindowStream

Données d'exploitation divisées en fenêtres

  • WindowStream<K, Integer> count() Le nombre de données dans la fenêtre statistique ;
  • WindowStream<K, V> filter(predictor) Filtrer les données dans la fenêtre ;
  • <OUT> WindowStream<K, OUT> map(mapperAction) Conversion individuelle des données dans la fenêtre ;
  • <OUT> WindowStream<K, OUT> aggregate(aggregateAction) Conversion plusieurs-à-un des données dans la fenêtre ;
  • <OUT> WindowStream<K, OUT> aggregate(accumulator) Effectuez des opérations d'agrégation sur les données, et l'agrégation prend en charge l'agrégation de second ordre, comme l'ajout de données lorsque la fenêtre n'est pas déclenchée et le calcul du résultat lorsque la fenêtre est déclenchée ;
  • void sink(topicName, serializer) Écrivez les résultats dans le sujet selon le formulaire de sérialisation personnalisé ;

 

おすすめ

転載: blog.csdn.net/leesinbad/article/details/134958975