2016-12-06 5 views
3

私はKafkaノードコンテナとは別に、ローカルの「起動」Dockerコンテナで分散モードでKafkaコネクタを起動しています。コネクタは正常に動作しますが、起動コンテナを強制終了すると、コネクタは動作を停止します。私はそれが登録され、別のコンテナにあるカフカノードのワーカーで実行されていると信じて以来、作業を続けることを期待していました。私の設定は以下の通りです:私が作成したノードを殺したときにKafka分散コネクタが死んでしまうのはなぜですか?

現在、私はDockerコンテナを使ってすべてをローカルで実行しています。私が持っている:

  1. A飼育係のノード(3.4.9)
  2. Aカフカノード(Apacheのは、0.10.1.0)
  3. A '打ち上げ' ノードを。

起動ノードが適切なKafkaバージョンをダウンロードし、その内容を解凍します。また

connect-distributed.sh config/connect-distributed.properties 

分散特性ファイルはグループIDを設定し、様々なトピック名、スキーマおよび変換器と:それは次いでようなコネクタを実行し、必要なJARファイルを含むようにクラスパスを設定し、コネクタのソースを構築します(上記のカフカノード(2)を指している)ブートストラップサーバ。

このコマンドは、適切なコネクタhttpサービスが正常に起動していると思われます。私はhttp://example:8083/connectorsにPOST要求を出して、コネクタタスクの設定を提供することができます。コマンドはエラーなしで完了し、コネクターは正常に開始されます。私はKafkaノード(2)のトピックから消費することができ、コネクターが動作し、データを送信していることを示す出力が表示されます。

起動ノード(3)を強制終了すると、私はKafkaクラスターに登録されているので、コネクターは1つのクラスターとして登録されているので、コネクターは継続して実行されます。コネクターは実行を継続せず、起動ノードで消滅するように見えます。クラスタ内の作業者がコネクタを管理する必要はありませんか?どうやってコネクターを起動するのかを変える必要があるのですか、何かを誤解していますか?

答えて

3

カフカコネクタはカフカブローカーでは実行されません。それらは "Kafka Connect Worker"プロセスで実行されます。これはあなたの質問が「起動ノード」と呼ぶものです。これらのプロセスはコネクタのREST要求を受け入れ、ワーカープロセスにコネクタを実行します。フードの下では、これらのプロセスは、通常の生産者と消費者を介してカフカブローカーと簡単にやりとりしています。 Kafka Connectは、スケーラブルなコネクタを簡単に構築できるように、それらのクライアントの上にフレームワークを提供しているので、コネクタ開発者は、コネクタが書かれているシステムにデータをプルまたはプッシュする方法だけに焦点を当てるだけです。これは、少なくとも1つのワーカープロセスがまだ生存している場合にのみ処理が続行されることを意味します。

ワーカープロセスには2種類あります。スタンドアロンモードでは、コネクタの設定はどこにも保持されません。通常、コマンドライン経由でコネクタの設定を渡します。オフセット情報(つまり、すでにコピーしたデータ)は、ローカルファイルシステム上で管理されています。したがって、このモードでは、同じファイルシステムにアクセスして同じノード上でプロセスを再起動すると、中断したところから再開することができます。

分散モードでは、作業者は作業を分散するように調整し、コネクタ構成、オフセットなどの共通の永続ストレージ(Kafka)を共有します。つまり、インスタンスを1つ起動してコネクタを作成すると、そのインスタンスはすべての作業を停止します。ただし、インスタンスを再起動すると、コネクタ設定を再送信せずに中断した場所から再開します。その情報はKafkaに保持されているためです。複数のインスタンスを起動すると、そのインスタンス間でタスクの負荷を分散するように調整されます.1つのインスタンスが失敗した場合(クラッシュ、実行中のインスタンス数、電源障害などにより)、残りのインスタンスは自動的に動作します。

あなたは労働者、さまざまな種類の詳細を見つけることができる、との答えのためのフェイルオーバーが分散モードでどのように機能するかはin Confluent's Kafka Connect documentation

+0

感謝。私のKafkaクラスタの各ノードで少なくとも1つのコネクタタスクを実行するワーカープロセスが必要な場合は、これは私のKafkaノード構成の一部です。 2番目の質問:何らかの理由でコネクターに障害が発生した場合は、必要なノードで自動的にコネクターを再始動するコネクター状況のトピックをモニターする必要がありますか? – LaserJesus

+1

ワーカーは自動的にタスクを配布します。したがって、少なくとも1つのコネクタを起動して十分なタスクがあれば、すべてのワーカーが積極的にデータを処理します。監視のためには、状況トピックを監視し、適切なアクションをとって再起動することができます(*が*合っていれば、タスクを再起動するだけで解決されない他のシステムの問題かもしれません)。 –

+0

もう一度お世話になりました。したがって、カフカクラスタに3つのノードがある場合は、各ノードのコネクタを起動して、各ノードのコネクタにタスクを実行させ、単一のノードに障害が発生しても、他のノード?私。あるノード上でコネクターを開始しても、コネクターとそれぞれのワーカーが自動的に他のノードで開始することはありませんか? – LaserJesus

関連する問題