1

私は非同期モードでkafkaプロデューサーを使用していますが、すべてのブローカーがダウンすると同期のように動作し、metadata.fetch.timeout.msが期限切れになるまで待機します。これは私の場合は60秒です。私の最初の質問は、これは正常な動作ですか、それとも何か間違ったことをしているのですか?

私のロジックのトランザクションは最大 100 ミリ秒で終了する必要があるため、このタイムアウト値は私にとって非常に大きな遅延です。おそらく、metadata.fetch.timeout.ms を 10 ミリ秒に設定すると問題が解決する可能性がありますが、これがシステムにどのように影響するかはわかりません。これはどこかでボトルネックや CPU の大量消費を引き起こしますか?

別の可能な解決策は、作成を本当に非同期にするexecutorserviceでメッセージを作成することですが、物事をより複雑にしたくありません。誰もこれを前に試しましたか?

私の最後の質問は、スイッチメカニズムを使用して、すべてのブローカーがダウンしている場合は kafka へのプロデュースを無効にし、すべてのブローカーが稼働している場合は有効にすることです。カフカにハートビートの問題に対する機能はありますか?

ありがとう。

4

1 に答える 1

1

これを行う最善の方法は、Zookeeper に直接フックすることです。どの言語を使用しているかはわかりませんが、Zookeeper クライアントが利用できるはずです。を持っているノードを使用しますnode-zookeeper-client。Node では、最初に do を呼び出しcreateClient()、次にgetChildren()Zookeeper パスでdo を呼び出します/brokers/ids。少なくともノードでは、ID の配列が変更されるたびにトリガーを変更するように設定できます。子がいない場合、すべてのブローカーがダウンしています。子供がいる限り、ブローカーがいます。

于 2016-03-11T01:08:01.110 に答える