2017-07-20 3 views
1

私は、AWS上で実行されている3機からなるカフカのクラスタを持っている:私は(> 0.8)新しいスタイルのカフカの消費者を使用していカフカブーストラップとハプロキシの負荷バランスをとるには?

をkafka3する kafka1。

私は、kafkaクライアントがkafkaサーバーの1つに接続し、サーバーのメタデータを取得してブローカーに直接接続することを知っています。

ブローカが失敗した場合でも、クライアントが引き続きメタデータを取得できるようにしたいと考えています。

私は、以下の設定でHAProxyロードバランサを持っている。このため

listen kafka 
     bind *:9092 
     mode tcp 
     balance roundrobin 
     no option clitcpka 
     option forceclose 
     timeout check 5s 
     server kafka1 kafka1.example.com:9092 check inter 3s fastinter 1s 
     server kafka2 kafka2.example.com:9092 check inter 3s fastinter 1s 
     server kafka3 kafka3.example.com:9092 check inter 3s fastinter 1s 

アイデアは、ブローカーの1つがダウンした場合、それは回転から削除され、メタデータが他の1から取得されていることです。また、クラスタにブローカを透過的に追加することもできます。

しかし、これは私のkafkaクライアントに問題を引き起こしています。 PipelineDBは、話題からの消費を拒否しているので、Python用のコンフルエントなkafkaライブラリもあります。 Kafkacatは消費しますが、しばらく後にエラーを与えて起動します:

% ERROR: Local: Broker transport failure: kafka.example.com:9092/bootstrap: Receive failed: Disconnected 
% ERROR: Local: Broker transport failure: kafka.example.com:9092/bootstrap: Connection closed 

私はカフカのブートストラップ手続きの負荷を分散する方法については、オンラインでの任意の情報を見つけることができません。代わりに、複数のAレコードでDNSエントリを設定するだけですが、私はブローカがダウンしているという問題にぶつかります。

答えて

2

3つのブートストラップサーバーをすべてカンマ区切りリストとして指定するだけです。次に、ダウンすると、次のメタデータを照会するだけです。

+0

アプリケーション設定を変更せずに4番目を追加したい場合はどうすればよいですか? –

+0

ブートストラップサーバーリストにすべてのブローカーをリストする必要はありません。これは、ノードのサブセットの短いリストです。そのため、クライアントは、それらのいずれかを照会して、クラスター全体でメタデータを取得できます。クライアントは引き続きクラスタ内の他のすべてのノードを検出して接続できます –

関連する問題