私は、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エントリを設定するだけですが、私はブローカがダウンしているという問題にぶつかります。
アプリケーション設定を変更せずに4番目を追加したい場合はどうすればよいですか? –
ブートストラップサーバーリストにすべてのブローカーをリストする必要はありません。これは、ノードのサブセットの短いリストです。そのため、クライアントは、それらのいずれかを照会して、クラスター全体でメタデータを取得できます。クライアントは引き続きクラスタ内の他のすべてのノードを検出して接続できます –