2016-07-22 4 views
8

私たちはかなり厳密なネットワークセグメンテーション方針を持っています。私はクラウドファウンドリのインスタンスを使ってアプリをデプロイしています。ファイアウォールルールは、クラウドファウンドリインスタンス内からカフカクラスタに到達するように設定されています。私はファイアウォールのルールも、飼い猫のインスタンスにも同様に設定されていると考えています。私は実際にそれを確認する必要があります。カフカとファイアウォールのルール

私の問題は、私がカフカにメッセージを送ることができるようだが、私の消費者はそれを拾っていないようだ。それは "ポーリング"中にハングアップするようです。

kafkaとzookeeperノードの標準ホストとポートだけではなく、ファイアウォールルールを処理する必要のある隠れたホストやポートがありますか?

+0

AWSルールのKafkaとZookeeperインスタンスで通信するために開いたポートのリストは何ですか? –

+0

AWSは使用していませんが、クラウドファウンドリからポート9091,9092,2181へのアクセスを実装したと思われます。最初の2つはカフカです。最後は飼い猫です。 –

+2

kafkaをクラスタセットアップまたはスタンドアロンで実行していますか?クラスタの場合は、ポート '2888&3888'を開きます。ポートの使用方法は、クライアント接続の場合は** 2181 **です。 **リーダーである場合、フォロワー接続の場合は2888 **、リーダー選出フェーズ中の他のサーバー接続の場合は** 3888 **となります。詳細については、この[link](https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.2/bk_HDP_Reference_Guide/content/zookeeper-ports.html) –

答えて

2

TL; DR:非表示のポートはありません。ブローカーの設定を確認してください。 Kafkaの消費者がアクセス可能なIP/PORTを宣伝することを確認してください。


私は消費者としてカフカ-pythonのライブラリとカフカ0.10.1.1と同じ問題を経験した後に、この質問に出くわしました。

いいえ、私はネットワークトラフィックをキャプチャしました。カフカと通信するために他のポートは使用しません。ブローカーが9092を使用するように構成されている場合、それはコンシューマーが使用する唯一のポートになります。

しかし、さらに調査すると、私の場合はブローカーの設定に誤りがありました。

kafka.advertised.listeners = PLAINTEXT:// [private_ip]:9092、SSL:// [public_ip]:9093 kafka.listeners = PLAINTEXT://0.0.0.0:9092、SSL://私は、PKIを設定持っていなかったが、私は公共のインターネットからの私の消費者をテストしたかったので、ブートストラップサーバとして9092:

0.0.0.0:9093は私が[public_ip]を使用していました。

コンシューマがブローカに接続できましたが、メッセージを引き出せませんでした。

消費者がPLAINTEXTを使用してKafkaに接続したため、KafkaはSSLアドレスの代わりにPLAINTEXTブローカーアドレスを宣言しました。その後、消費者は公的なIPアドレスではなく私的IPアドレスを使用してカフカのブローカーにアクセスしようとしました。 (生のネットワークキャプチャによって明らかにされたように)

クライアントが&のブローカーでPKIを有効にして設定した後、パブリックインターネットからメッセージをプルできるようになりました。

+0

この回答は誤解を招くことです。スタンドアロンのカフカインスタンスには適していますが、クラスタで実行しているときは、カフカでもフォロワー接続とリーダー選出のためにポート2888と3888が必要であることを考慮していません。問題は、スタンドアロンのインスタンスではなく、カフカクラスタに関するものです。 –

2

カフカと飼い犬は別物です。両方を同じマシン上で実行している場合は、両方のポートを開く必要があります。

カフカのデフォルトポート:

  • 9092、サーバー上で変更することができます。プロパティ。

飼育係のデフォルトポート:クライアント接続のための

  • 2181;
  • フォロワー(他の飼育係ノード)接続のための2888;
  • インターノード接続の場合は3888、

これだけです。

カフカは、またリスナーadvertised.listeners最初のユーザーに混乱を成長特性を有しています。 リスナーは、サーバーがバインドするネットワークインターフェイスです。advertised.listenersは、サーバーが動物園に登録して要求を受信するホスト名またはIPです。ホスト名を入力すると、クライアントは接続にホスト名を使用する必要があります。 advertised.listeners urlは、クライアントが接続をブートストラップするために使用するURLです。接続が確立されると、クライアントはzookeeperに接続して他のブローカのURLを取得します。あなたのプロデューサーはそのために働いていません。

したがって、2181だけでなく、ファイアウォールでも2888を開く必要があります。@ Jaya Ananthramは、kafkaが2181ポートを必要としていると言って間違っています。それは飼育係の港です。 kafka 0.10スチルの消費者は、何かを持続させるために飼育係に連絡する必要があります。

Kafka 0.11.0.0がこれを変更し、クライアントには飼い葉桶はまったく必要ありません。

関連する問題