Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Gérez des flux de données temps réel

    12 juin 2017 à 16:14:32

    (la sortie date d'il y a presque deux semaines en fait, ce qui est assez ironique pour un cours sur le temps réel...)

    Ce cours est le second du parcours data architect ; on y parle surtout d'Apache Kafka et Apache Storm qui sont des outils pour construire des pipelines de gestion de flux de données temps réel.

    Profitez de ce post pour poser toutes vos questions !

    Temps-réllement vôtre,

    Régis
    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2018 à 10:15:33

      Bonjour.

      Petit feedback.

      Dans le chapitre "Déployez et administrer un cluster Kafka", j'ai relevé une petite coquille lors de l'augmentation du taux de réplication d'un topic, il faut lire velib-stations au lieu de velib-partitions après la commande qui modifie le replication-factor.

      • Partager sur Facebook
      • Partager sur Twitter
      Rien n'arrive dans la vie... ni comme on le craint, ni comme on l'espère.
        1 février 2018 à 11:34:21

        Merci beaucoup pour ce retour, Michel, nous corrigeons de suite.
        • Partager sur Facebook
        • Partager sur Twitter
          6 février 2018 à 12:39:12

          Bonjour.

          J'ai terminé le cours qui est de bonne facture !

          Concernant l'activité Google Analytics, j'ai dû changer le paramètre "topology.message.timeout.secs" avec une valeur relativement grande (40000) sinon on obtient une exception "Window duration (length + sliding interval) value xxx is more than topology.message.timeout.secs value 30000" afin de pouvoir gérer une fenêtre glissante d'une heure et afficher un message toutes les 30 secondes.
          Est-ce que c'est la bonne démarche et est-ce que cela ne nuit pas à l'aspect temps réel de storm ?

          Cordialement,

          Michel.

          • Partager sur Facebook
          • Partager sur Twitter
          Rien n'arrive dans la vie... ni comme on le craint, ni comme on l'espère.
            6 février 2018 à 16:06:25

            @Michel: chut, ça fait partie des choses à découvrir dans l'activité ! Et non, ça ne nuit pas à l'aspect temps réel, puisqu'on cherche expressément à ne traiter les données que toutes les 30 secondes.
            • Partager sur Facebook
            • Partager sur Twitter
              10 mars 2018 à 14:36:12

              Bonjour,

              J'ai un problème d'encodage avec le script "velib-monitor-stations.py" pour la partie Kafka.

                File "./velib-monitor-stations.py", line 23, in <module>
                  count_diff, station["address"], contract
              UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 10: ordinal not in range(128)
              
              

              Je ne suis pas expert en python donc je viens demander de l'aide.

              Avant l'erreur j'obtiens tout de même 2 changements d'état de différente rues à Dublin.

              Tristan.

              -
              Edité par Tristan A. 10 mars 2018 à 14:36:44

              • Partager sur Facebook
              • Partager sur Twitter
                11 mars 2018 à 19:09:56

                @Tristan A.: quelle version de Python utilisez-vous ? (python --version) Il faut une version 3 ou supérieure.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 mars 2018 à 12:03:53

                  Hello,

                  J'ai un soucis de compréhension avec l'exercice "Gérez des flottes de vélos comme un·e pro".

                  Il est dit de modifier le fichier get_stations.py de façon à envoyer des messages dans le topic lorsqu'une station se vide (alors qu'elle ne l'etait pas avant).

                  Ceci implique garder un état de chaque station dans ce fichier, supposé être le producer, et dont le passage à l'échelle n'est pas possible (ou ne serait pas logique ou cohérent).

                  J'ai l'impression que cela va à l'encontre du concept même de l'utilisation de la file de message, comme expliqué dans le cour ici https://openclassrooms.com/courses/gerez-des-flux-de-donnees-temps-reel/creez-votre-premiere-application-avec-kafka#/id/r-4477813

                  L'archi qui me parait la plus pratique serait:

                  - Un producer qui feed le topic velib-stations (exacte implem de ce fichier get_stations.py)

                  - Un consumer de "velib-stations" qui examinera l'etat des stations et feed le topic "empty-station" 

                  - Un consumer de "empty-station" qui traitera les messages de sations vides.

                  Qu'en pensez vous (j'ai peut-etre très mal compris la chose)?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 avril 2018 à 23:10:58

                    .

                    -
                    Edité par kiki604 6 avril 2018 à 9:42:25

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 avril 2018 à 9:53:59

                      Bonjour

                      pour les utilisateurs sous windows , les liens ne sont pas les mêmes . Ce serait bien de le préciser dans le cours.

                      $ ./bin/zookeeper-server-start.sh ./config/zookeeper.properties

                      $ ./bin/windows/zookeeper-server-start.bat ./config/zookeeper.properties

                      De plus

                      J'arrive à lancer le serveur zookeeper par contre quand je veux lancer le serveur kafka j'ai des messages d'erreur.

                      [2018-04-03 23:02:45,663] FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
                      java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
                              at kafka.utils.CoreUtils$.urlSafeBase64EncodeNoPadding(CoreUtils.scala:294)
                              at kafka.utils.CoreUtils$.generateUuidAsBase64(CoreUtils.scala:282)
                              at kafka.server.KafkaServer$$anonfun$getOrGenerateClusterId$1.apply(KafkaServer.scala:335)
                              at kafka.server.KafkaServer$$anonfun$getOrGenerateClusterId$1.apply(KafkaServer.scala:335)
                              at scala.Option.getOrElse(Option.scala:120)
                              at kafka.server.KafkaServer.getOrGenerateClusterId(KafkaServer.scala:335)
                              at kafka.server.KafkaServer.startup(KafkaServer.scala:190)
                              at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
                              at kafka.Kafka$.main(Kafka.scala:67)
                              at kafka.Kafka.main(Kafka.scala)
                      Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

                              at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
                              at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
                              at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
                              ... 10 more
                      [2018-04-03 23:02:45,790] INFO shutting down (kafka.server.KafkaServer)
                      [2018-04-03 23:02:45,816] INFO Terminate ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
                      [2018-04-03 23:02:45,891] INFO Session: 0x1628d4cdb5e0000 closed (org.apache.zookeeper.ZooKeeper)
                      [2018-04-03 23:02:45,911] INFO EventThread shut down for session: 0x1628d4cdb5e0000 (org.apache.zookeeper.ClientCnxn)
                      [2018-04-03 23:02:45,959] INFO shut down completed (kafka.server.KafkaServer)
                      [2018-04-03 23:02:45,970] FATAL Fatal error during KafkaServerStartable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
                      java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
                              at kafka.utils.CoreUtils$.urlSafeBase64EncodeNoPadding(CoreUtils.scala:294)
                              at kafka.utils.CoreUtils$.generateUuidAsBase64(CoreUtils.scala:282)
                              at kafka.server.KafkaServer$$anonfun$getOrGenerateClusterId$1.apply(KafkaServer.scala:335)
                              at kafka.server.KafkaServer$$anonfun$getOrGenerateClusterId$1.apply(KafkaServer.scala:335)
                              at scala.Option.getOrElse(Option.scala:120)
                              at kafka.server.KafkaServer.getOrGenerateClusterId(KafkaServer.scala:335)
                              at kafka.server.KafkaServer.startup(KafkaServer.scala:190)
                              at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
                              at kafka.Kafka$.main(Kafka.scala:67)
                              at kafka.Kafka.main(Kafka.scala)
                      Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
                              at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
                              at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
                              at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
                              ... 10 more
                      [2018-04-03 23:02:46,046] INFO shutting down (kafka.server.KafkaServer)

                      -
                      Edité par kiki604 6 avril 2018 à 10:04:01

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 avril 2018 à 14:53:55

                        Bonjour, 

                        J'arrive à bien faire fonctionner tous les scripts.

                        Mais je comprends pas la ligne :

                         count_diff = available_bike_stands - city_stations[station_number]

                        Pour moi :available_bike_stands = attaches velib libre à l'instant t 

                        Je ne comprends pas ce qu'est city_stations[station_number] , c'es la même variable mais à l'instant t-1 ? et comment city_stations est-il construit?

                        Pourriez-vous donner d'avantage d'explications sur le calcul de count_diff ?

                        Merci d'avance,

                        Anne-Lise

                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 décembre 2018 à 17:28:53

                          Bonjour à tous! J'ai un souci dans l'installation de kafka: quand je lance le script de zookeeper ça marche car telnet localhost 2181 fonctionne bien. Par contre malgré que j'ai suivi le tutoriel comme indiqué, le serveur kafka ne reponds pas. telnet localhost 9092 ne marcje pas! Pourriez vous m'aider ? quel peut être le problème? Merci d'avance!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 décembre 2018 à 21:54:19

                            Ardjouma ElohSIRIBIE a écrit:

                            Bonjour à tous! J'ai un souci dans l'installation de kafka: quand je lance le script de zookeeper ça marche car telnet localhost 2181 fonctionne bien. Par contre malgré que j'ai suivi le tutoriel comme indiqué, le serveur kafka ne reponds pas. telnet localhost 9092 ne marcje pas! Pourriez vous m'aider ? quel peut être le problème? Merci d'avance!


                            Bonjour, 

                            Tu as quoi comme erreur lorsque tu essaies de démarrer le serveur kafka ?

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le savant ce n'est pas celui qui a le plus appris mais c'est celui qui a le plus compris.

                              11 janvier 2019 à 21:55:53

                              Bonjour !

                              J'ai un problème de compréhension pour le TP "Gérez des flottes de vélos comme un·e pro" :

                              Le producer doit émettre des messages uniquement en cas de changement d'état d'une station (vide -> non vide et vice-versa). Donc coté consumer on a que cette information de changement d'état, en supposant que le message passé contienne uniquement les informations sur la station concernée.

                              Pour répondre à la question "Afficher le nombre de stations vides dans la ville", faut-il se contenter du nombre de stations devenues et restées vides depuis le lancement des scripts, ou faut-il également tenir compte des stations qui étaient déjà vides avant le lancement ? Auquel cas on a besoin de plus d'informations coté consumer et ça complique pas mal les choses.

                              Merci de votre éclaircissement,

                              Cdlt,

                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 janvier 2019 à 18:06:15

                                Bonjour Thomas.

                                La réponse est "il faut se contenter du nombre de stations devenues et restées vides depuis le lancement des scripts"

                                Cordialement,

                                Michel.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Rien n'arrive dans la vie... ni comme on le craint, ni comme on l'espère.
                                  15 mai 2019 à 8:57:34

                                  Bonjour à tous,

                                  Juste pour signaler que sur ce cours les corrections sont longues, très longues (2 mois et +).

                                  Sur ce genre de cours possiblement moins populaires, la correction par ses pairs trouve peut-être ses limites?

                                  Sinon rétrospectivement, cours très intéressant et bien fait mais je pense qu'il pourrait être intéressant d'approfondir quelques notions. Je pense notamment à quelques points au niveau des topologies Storm : les jointures/regroupements, l'api Trident et l'utilisation de connexion à des bases noSql pour la reprise en cas de crash.

                                  Merci en tous cas!

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 juin 2019 à 23:33:18

                                    Bonjour à tous,

                                    Petite question sur l'exercice 1 pour afficher le compte des stations vides.

                                    Si on passe à l'échelle sur plusieurs partitions et donc avec plusieurs consumers, le script de chaque consumer va avoir son propre compte de stations vides non ?

                                    Merci beaucoup pour ce cours, j'avais besoin de comprendre les spécificités de Kafka par rapport à RabbitMQ.

                                    Hugues

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 avril 2020 à 5:51:40

                                      Commentaire effacé

                                      -
                                      Edité par OusmaneAttouman 20 avril 2020 à 3:24:14

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 septembre 2023 à 11:33:56

                                        Bonjour,

                                        dans la partie "Métamorphosez vos applications temps réel avec Kafka", le lien vers l'archive est mort.

                                        il faut remplacer "wget http://apache.crihan.fr/dist/kafka/0.10.2.1/kafka_2.10-0.10.2.1.tgz" par :

                                        - si on suit les instructions de version : "wget https://archive.apache.org/dist/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz"

                                        - si on reste cohérent avec le lien en place : "wget https://archive.apache.org/dist/kafka/0.10.2.1/kafka_2.10-0.10.2.1.tgz"

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 octobre 2023 à 14:29:47

                                          Bonjour, 

                                          Tout d'abord, merci pour cet excellent cours, je me régale.

                                          Je n'ai pas réussi à lancer kafka-manager (désormais CMAC) avec la commande proposée. Après un peu de recherche et pas mal d'essai, j'ai réussi avec la commande suivante:

                                          ZK_HOSTS=localhost:2181 bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=8080

                                          Je partage au cas où quelqu'un rencontre le même problème que moi.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            28 février 2024 à 11:12:01

                                            Bonjour à tous,
                                            J'avais mis ce cours dans ma liste mais je constate qu'il a été supprimé, savez-vous pourquoi ?

                                            Merci par avance,
                                            Guilhem
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            [Cours] Gérez des flux de données temps réel

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            • Editeur
                                            • Markdown