web-dev-qa-db-fra.com

Quel est un moyen simple et efficace de déboguer des connecteurs personnalisés Kafka?

Je travaille quelques connecteurs Kafka et je ne vois aucune erreur dans leur création/déploiement dans la sortie de la console, mais je n'obtiens pas le résultat que je recherche ( aucun résultat que ce soit d'ailleurs, souhaité ou autre). J'ai créé ces connecteurs en fonction de l'exemple de connecteurs FileStream de Kafka, donc ma technique de débogage était basée sur l'utilisation du SLF4J Logger utilisé dans l'exemple. J'ai recherché le journal les messages que je pensais être produits dans la sortie de la console, mais en vain. Suis-je à la mauvaise place pour ces messages? Ou peut-être y a-t-il une meilleure façon de déboguer ces connecteurs?

Exemples d'utilisation du SLF4J Logger que j'ai référencé pour mon implémentation:

Kafka FileStreamSinkTask

Kafka FileStreamSourceTask

9
C. Ommen

Je vais essayer de répondre à votre question de manière large. Un moyen simple de développer un connecteur peut être le suivant:

  • Structurez et créez votre code source de connecteur en consultant l'un des nombreux connecteurs Kafka disponibles publiquement (vous trouverez une liste complète disponible ici: https: //www.confluent. io/produit/connecteurs / )
  • Téléchargez la dernière édition de Confluent Open Source (> = 3.3.0) sur https://www.confluent.io/download/
  • Rendez votre package de connecteurs disponible pour Kafka Connectez-vous de l'une des manières suivantes:

    1. Stockez tous vos fichiers jar de connecteur (jar de connecteur plus jars de dépendance à l'exception des jars API Connect) dans un emplacement de votre système de fichiers et activez l'isolement du plug-in en ajoutant cet emplacement à la propriété plugin.path Dans les propriétés du travailleur Connect. Par exemple, si vos pots de connecteurs sont stockés dans /opt/connectors/my-first-connector, Vous définirez plugin.path=/opt/connectors Dans les propriétés de votre travailleur (voir ci-dessous).
    2. Stockez tous vos fichiers jar de connecteur dans un dossier sous ${CONFLUENT_HOME}/share/Java. Par exemple: ${CONFLUENT_HOME}/share/Java/kafka-connect-my-first-connector. (Doit commencer par le préfixe kafka-connect- À récupérer par les scripts de démarrage). $ CONFLUENT_HOME est l'endroit où vous avez installé Confluent Platform.
  • Si vous le souhaitez, augmentez votre journalisation en modifiant le niveau de journalisation de la connexion dans ${CONFLUENT_HOME}/etc/kafka/connect-log4j.properties En DEBUG ou même TRACE.

  • Utilisez Confluent CLI pour démarrer tous les services, y compris Kafka Connect. Détails ici: http://docs.confluent.io/current/connect/quickstart.html

    En bref: confluent start

Remarque: Le fichier de propriétés du travailleur Connect actuellement chargé par la CLI est ${CONFLUENT_HOME}/etc/schema-registry/connect-avro-distributed.properties. C'est le fichier que vous devez modifier si vous choisissez d'activer l'isolation du chargement de classe, mais également si vous devez modifier les propriétés de votre travailleur Connect.

  • Une fois que le travailleur Connect est en cours d'exécution, démarrez votre connecteur en exécutant:

    confluent load <connector_name> -d <connector_config.properties>

    ou

    confluent load <connector_name> -d <connector_config.json>

    La configuration du connecteur peut être au format Java ou JSON).

  • Exécutez confluent log connect Pour ouvrir le fichier journal du travailleur Connect, ou accédez directement à l'emplacement de stockage de vos journaux et données en exécutant

    cd "$( confluent current )"

Remarque: changez l'emplacement de stockage de vos journaux et données au cours d'une session de Confluent CLI en définissant la variable d'environnement CONFLUENT_CURRENT De manière appropriée. Par exemple. étant donné que /opt/confluent existe et est l'endroit où vous souhaitez stocker vos données, exécutez:

export CONFLUENT_CURRENT=/opt/confluent
confluent current

  • Enfin, pour déboguer de manière interactive votre connecteur, un moyen possible consiste à appliquer les éléments suivants avant de démarrer Connect with Confluent CLI:

    confluent stop connect
    export CONNECT_DEBUG=y; export DEBUG_SUSPEND_FLAG=y;
    confluent start connect

    puis connectez-vous avec votre débogueur (par exemple à distance au travailleur Connect (port par défaut: 5005). Pour arrêter l'exécution de la connexion en mode débogage, exécutez simplement: unset CONNECT_DEBUG; unset DEBUG_SUSPEND_FLAG; lorsque vous avez terminé.

J'espère que ce qui précède rendra le développement de votre connecteur plus facile et ... plus amusant!

21

Le module de connecteur est exécuté par le framework de connecteur kafka. Pour le débogage, nous pouvons utiliser le mode autonome. Nous pouvons configurer IDE pour utiliser la fonction principale ConnectStandalone comme entrée point.

  1. créer le débogage configurer comme suit. N'oubliez pas de cocher "Inclure les dépendances avec la portée" fournie "s'il s'agit d'un projet maven enter image description here

  2. le fichier de propriétés du connecteur doit spécifier le nom de classe de connecteur "connector.class" pour le débogage enter image description here

  3. le fichier de propriétés du travailleur peut être copié à partir du dossier kafka /usr/local/etc/kafka/connect-standalone.properties
0
Shen liang

j'aime la réponse acceptée. une chose - les variables d'environnement ne fonctionnaient pas pour moi ... j'utilise confluent community edition 5.3.1 ...

voici ce que j'ai fait qui a fonctionné ...

j'ai installé le cli confluent à partir d'ici: https://docs.confluent.io/current/cli/installing.html#tarball-installation

j'ai couru confluent en utilisant la commande confluent local start

j'ai obtenu les détails de l'application connect en utilisant la commande ps -ef | grep connect

j'ai copié la commande résultante dans un éditeur et ajouté l'argument (juste après Java):

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

puis j'ai arrêté de me connecter en utilisant la commande confluent local stop connect

puis j'ai exécuté la commande connect avec l'argument

bref entracte ---

vs développement de code est dirigé par erich gamma - de gang of four la renommée, qui a également écrit Eclipse. vs code devient une première classe Java ide voir https://en.wikipedia.org/wiki/Erich_Gamma

entracte sur ---

ensuite, j'ai lancé le code vs et ouvert le dossier du connecteur Oracle Debezium (cloné à partir d'ici) https://github.com/debezium/debezium-incubator

alors j'ai choisi Debug - Open Configurations

enter image description here

et entré la configuration de débogage en surbrillance

enter image description here

puis exécutez le débogueur - il atteindra vos points d'arrêt !!

enter image description here

la commande connect devrait ressembler à ceci:

/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/bin/Java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -Xms256M -Xmx2G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true -Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/var/folders/yn/4k6t1qzn5kg3zwgbnf9qq_v40000gn/T/confluent.CYZjfRLm/connect/logs -Dlog4j.configuration=file:/Users/myuserid/confluent-5.3.1/bin/../etc/kafka/connect-log4j.properties -cp /Users/myuserid/confluent-5.3.1/share/Java/kafka/*:/Users/myuserid/confluent-5.3.1/share/Java/confluent-common/*:/Users/myuserid/confluent-5.3.1/share/Java/kafka-serde-tools/*:/Users/myuserid/confluent-5.3.1/bin/../share/Java/kafka/*:/Users/myuserid/confluent-5.3.1/bin/../support-metrics-client/build/dependant-libs-2.12.8/*:/Users/myuserid/confluent-5.3.1/bin/../support-metrics-client/build/libs/*:/usr/share/Java/support-metrics-client/* org.Apache.kafka.connect.cli.ConnectDistributed /var/folders/yn/4k6t1qzn5kg3zwgbnf9qq_v40000gn/T/confluent.CYZjfRLm/connect/connect.properties
0
Datum Geek