2016-07-29 6 views
4

AWSでKafkaブローカクラスタに関する質問がありました。今はAWS ELBがクラスターの前に座っていますが、自分のプロデューサーまたはコンシューマーの "bootstrap.servers"プロパティーをELBの "A"レコード(および正しいポート番号)に設定すると、プロデューサーとコンシューマーの両方が消費者はそれぞれメッセージを生成し消費することができない。私はブローカー上のすべてのSSLを無効にしてPLAINTEXT 9092ポートを介して接続しています。私のELBはポート1234を9092に転送します。例えば、プロデューサのConfigsプロパティでは、...Kafkaはブローカクラスタの前でELBをサポートしていますか?

bootstrap.servers =(ELBの "A" レコード):1234

詳細情報://(EC2:

  • マイELBのプロトコルは、TCP/TCPである
  • ブローカーに私の "advertised.listeners" プロパティはPLAINTEXTあります-private-ip):9092

ELBの後ろにカフカを運んでいる人はいますか?もしそうなら、私を助けてください!

答えて

5

bootstrap.serversとしてELBを使用できますが、ブローカにはクライアントに直接アクセスする必要があります。 ELBは、クライアントがどのブローカーにどのトピックパーティションがあるかを把握するためにクライアントが最初に要求するメタデータ要求に使用されますが、それ以降はサーバーのホスト名を使用します(またはカスタマイズする必要がある場合はadvertised.listenersサーバーのパブリックIPを取得するためにEC2インスタンスで必要な場合があります)。

+0

私はまだ少し混乱しています。 ELBがプライベートIPを介してそのインスタンスに話をしないので、広告されたリスナーをプライベートIPにしたいのですか? ec2の公開IPと非公開IPの両方を試しましたが、どちらも問題はありません。 Javaのためにkafkaクライアントライブラリを使用しています。 – Mattnv92

+0

Kafkaを実行しているEC2インスタンスは、単一のインターフェイスでリッスンできますが、パブリックIPとプライベートIPの両方を対象とするトラフィックを受け入れることができます。 ELBがクラスタに関するメタデータを取得するための最初のリクエストにのみ使用されていることです。その後、クライアントは各トピックパーティションのリーダーブローカーと直接話すことができる必要があります。 ELBを使用してKafkaクラスタを公開するには、各ブローカの 'advertised.listeners'も公開されていることを確認する必要があります。 –

+1

私はとても馬鹿だと感じます。実際には動作していましたが、ELBはヘルスチェックが失敗したためにインスタンスが「稼働中ではない」と報告していました。 "pingable"ではないブローカーにデフォルトでポート80を指していました。そこで、ELBはブローカーのいずれにもトラフィックをルーティングしませんでした。私たちはELBにブローカーのZookeeperポートをpingしています。それは愚かなものでなければならないことを知っていた:p。助けてくれてありがとう!それは間違いなくカフカがどのように働いているかを明らかにしました、そして、私は将来他の人を助けるでしょう! – Mattnv92

1

IMHO、カフカクラスターにSLBを追加することは推奨されていません。

  • カフカクラスタは本質的に分散されているため、SLBはシングルポイント障害の危険性を追加し、クラスタ設定を複雑にします。
  • メッセージ送受信はネットワーク遅延に影響されますが、SLBはメッセージスループットを確実に低下させます。
関連する問題