web-dev-qa-db-ja.com

カスタムKafkaコネクタをデバッグする簡単で効果的な方法は何ですか?

いくつかのKafkaコネクタを使用しており、コンソールの出力でそれらの作成/デプロイメントにエラーが表示されませんが、探している結果が得られません(そのため、望ましいかどうかにかかわらず、結果はまったくありません。私はこれらのコネクタをKafkaのサンプルFileStreamコネクタに基づいて作成したので、私のデバッグ手法は、サンプルで使用されているSLF4Jロガーの使用に基づいていました。ログを検索しましたコンソール出力で生成されるだろうと思ったが、役に立たないメッセージこれらのメッセージを間違った場所で探していますか?あるいは、これらのコネクターをデバッグするためのより良い方法はありますか?

私の実装で参照したSLF4Jロガーの使用例:

Kafka FileStreamSinkTask

Kafka FileStreamSourceTask

9
C. Ommen

幅広い質問にお答えできるよう努めます。コネクタ開発を行う簡単な方法は次のとおりです。

  • 公開されている多数のKafkaコネクタの1つを見て、コネクタのソースコードを構造化してビルドします(詳細なリストはこちらから入手できます: https://www.confluent。 io/product/connectors /
  • https://www.confluent.io/download/ から最新のConfluent Open Sourceエディション(> = 3.3.0)をダウンロードします
  • コネクタパッケージをKafkaで利用できるようにします。以下のいずれかの方法で接続します。

    1. すべてのコネクタjarファイル(コネクタjarと、Connect API jarを除く依存関係jar)をファイルシステム内の場所に保存し、この場所をConnectワーカープロパティの_plugin.path_プロパティに追加してプラグイン分離を有効にします。たとえば、コネクタjarが_/opt/connectors/my-first-connector_に格納されている場合、ワーカーのプロパティで_plugin.path=/opt/connectors_を設定します(以下を参照)。
    2. すべてのコネクタjarファイルを_${CONFLUENT_HOME}/share/Java_の下のフォルダに保存します。例:_${CONFLUENT_HOME}/share/Java/kafka-connect-my-first-connector_。 (_kafka-connect-_接頭辞で始まる必要があり、起動スクリプトによってピックアップされます)。 $ CONFLUENT_HOMEはConfluent Platformをインストールした場所です。
  • 必要に応じて、_${CONFLUENT_HOME}/etc/kafka/connect-log4j.properties_のConnectのログレベルをDEBUGまたはTRACEに変更して、ロギングを増やします。

  • Confluent CLIを使用して、Kafka Connectを含むすべてのサービスを開始します。詳細はこちら: http://docs.confluent.io/current/connect/quickstart.html

    簡単に言うと、_confluent start_

注:現在CLIによってロードされているConnectワーカーのプロパティファイルは_${CONFLUENT_HOME}/etc/schema-registry/connect-avro-distributed.properties_です。これは、クラスローディング分離を有効にすることを選択した場合だけでなく、接続ワーカーのプロパティを変更する必要がある場合にも編集する必要があるファイルです。

  • Connectワーカーを実行したら、次のコマンドを実行してコネクタを起動します。

    _confluent load <connector_name> -d <connector_config.properties>_

    または

    _confluent load <connector_name> -d <connector_config.json>_

    コネクタ構成は、JavaプロパティまたはJSON形式のいずれかです。

  • _confluent log connect_を実行してConnectワーカーのログファイルを開くか、実行してログとデータが保存されている場所に直接移動します

    cd "$( confluent current )"

注:環境変数_CONFLUENT_CURRENT_を適切に設定して、Confluent CLIのセッション中にログとデータが保存される場所を変更します。例えば。 _/opt/confluent_が存在し、データを保存する場所である場合、次を実行します。

_export CONFLUENT_CURRENT=/opt/confluent_
_confluent current_

  • 最後に、コネクタをインタラクティブにデバッグするには、Connect with Confluent CLIを開始する前に次の方法を適用する方法があります。

    _confluent stop connect_
    _export CONNECT_DEBUG=y; export DEBUG_SUSPEND_FLAG=y;_
    _confluent start connect_

    デバッガーに接続します(たとえば、リモートでConnectワーカーに接続します(デフォルトポート:5005)。デバッグモードでの接続の実行を停止するには、次のコマンドを実行します:_unset CONNECT_DEBUG; unset DEBUG_SUSPEND_FLAG;_完了したら。

上記があなたのコネクタ開発をより簡単にし、そして...もっと楽しくなることを願っています!

コネクタモジュールはkafkaコネクタフレームワークによって実行されます。デバッグにはスタンドアロンモードを使用できます。IDEを構成して、ConnectStandaloneメイン関数をエントリとして使用できますポイント。

  1. 次のようにデバッグ構成を作成します。 Mavenプロジェクトの場合は、「「提供された」スコープの依存関係を含める」にチェックマークを付けることを忘れないでください enter image description here

  2. コネクタプロパティファイルでは、デバッグのためにコネクタクラス名「connector.class」を指定する必要があります enter image description here

  3. ワーカープロパティファイルはkafkaフォルダー/usr/local/etc/kafka/connect-standalone.propertiesからコピーできます
0
Shen liang

私は受け入れられた答えが大好きです。 1つのこと-環境変数が機能しませんでした... Confluent Community Edition 5.3.1を使用しています...

ここで私がやったことはうまくいきました...

私はここから合流CLIをインストールしました: https://docs.confluent.io/current/cli/installing.html#tarball-installation

コマンドconfluent local startを使用してコンフルエントになりました

コマンドps -ef | grep connectを使用して接続アプリの詳細を取得しました

結果のコマンドをエディターにコピーして、引数を追加しました(Javaの直後):

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

次に、コマンドconfluent local stop connectを使用して接続を停止しました

次に、引数を指定して接続コマンドを実行しました

短い休憩---

vsコードの開発は、Eclipseを書いたgang of four名声のerich gammaが主導しています。 vsコードは最初のクラスになりますJava ide see https://en.wikipedia.org/wiki/Erich_Gamma

休憩---

次に、vsコードを起動し、debezium Oracleコネクタフォルダーを開きます(ここから複製) https://github.com/debezium/debezium-incubator

それから私はDebug - Open Configurationsを選びました

enter image description here

強調表示されたデバッグ構成を入力しました

enter image description here

そしてデバッガーを実行します-それはあなたのブレークポイントにヒットします!!

enter image description here

接続コマンドは次のようになります。

/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