web-dev-qa-db-ja.com

Kafkaおよびファイアウォールルール

かなり厳格なネットワークセグメンテーションポリシーがあります。クラウドファウンドリインスタンスを使用してアプリをデプロイしています。ファイアウォールのルールは、クラウドファウンドリ・インスタンス内からkafkaクラスタに到達するように設定されています。私は、ファイアウォールのルールも同様のZooKeeperインスタンスを取得するように設定されていると信じている。私の必要性実際にそれを確認します。

私の問題は、カフカへのメッセージを作成できることですが、私の消費者はそれらを拾っていないようです。 「ポーリング」中にハングするようです。

いくつかの隠されたホストまたはポートが、私はkafkaと飼育係のノードにだけ、標準のホストとポートではありません、私のファイアウォールルールのために対処する必要があることがありますか?

16
George Smith

カフカとズーキーパーは別のものです。あなたが同じマシン上で両方を実行している場合は、コルスで、両方のポートを開く必要があります。

kafkaのデフォルトポート:

  • 9092、server.propertiesで変更できます。

zookeeperのデフォルトポート:

  • クライアント接続の場合は2181。
  • フォロワー(他の動物園飼育係ノード)接続の場合は2888。
  • ノード間接続の場合は3888。

それでおしまい。

Kafkaには、listenersおよびadvertised.listeners最初のユーザーにいくつかの混乱が成長する性質。簡単にするために、listenerはサーバーがバインドするネットワークインターフェースであり、advertised.listenersサーバーが飼育係に自身を登録し、要求に耳を傾けるだろうホスト名またはIPです。あなたがそこにホスト名を入れた場合は、あなたのクライアントが接続するホスト名を使用する必要があります。 advertised.listenersURLは、クライアントがbootstrap=接続に使用するURLです。接続が確立されると、クライアントは他のブローカーのURLを取得するためのZooKeeperへの接続を取得します。あなたのプロデューサーは、そのため機能していません。

ですから、2181だけでなく、ファイアウォールでも2888を開く必要があります。そして、@ Jaya Ananthramは、kafkaには2181ポートが必要です。これは動物園飼育ポートです。 kafka= 0.10 stillsの消費者は、いくつかのものを保持するためにzookeeperに連絡する必要があります。

カフカ0.11.0.0はこれを変更し、クライアントはすべての飼育係を必要としない行っています。

17
Marcos Arruda

TL; DR:隠しポートはありません。あなたのブローカーの設定を確認してください。 Kafka消費者が到達可能なIP/PORTをアドバタイズすることを確認してください。


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

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

しかし、さらなる調査の結果、私の場合、ブローカーの構成に問題がありました。

kafka.advertised.listeners = PLAINTEXT:// [private_ip]:9092、SSL:// [public_ip]:9093 kafka.listeners = PLAINTEXT://0.0.0.0:9092、SSL://0.0.0.0:9093

[public_ip]:9092をbootstrapサーバーとして使用しました。PKIをセットアップしていないため、コンシューマーをテストしたかったためです。公共のインターネットから。

消費者はブローカーに接続できましたが、メッセージをプルできませんでした。

消費者が接続するのでKafka平文を使用して、Kafkaアドバタイズ平文ブローカアドレスの代わりにSSLアドレス。次に、消費者は、パブリックIPアドレスの代わりにプライベートIPアドレスを使用して、Kafkaブローカーに到達しようとしました。 (未加工のネットワークキャプチャによって明らかにされるように)

ブローカーとクライアントでPKIを有効にして設定した後、パブリックインターネットから問題なくメッセージをプルできました。

3
Duke Grouchy