2016-04-29 8 views
1

Apache Kafkaを使用して、TimeseriesデータをTimeseriesデータベースに永続化しました。私たちが始めたのは、単一のトピック、プロデューサー、このトピックを書くことと、単一の消費者がこのトピックを読んで、そのデータをTimeseriesデータベースにダンプすることでした。パーティションを使用したApache Kafka Scalingトピック

私たちは3つのブローカーインスタンスを持っていました。最初の試行で気づいたのは、プロデューサーがトピックにメッセージを書き込むのがかなり速かったということでした。 30分以内に、私たちは約150万のメッセージを持っていました。消費者は毎秒300のメッセージをやっていました。

私たちの次のアプローチは、トピックを分割し、より多くの消費者インスタンス(パーティションの数に等しい)を持つことでした。これは消費者の書き込み速度を確実に改善しました。今私の質問は以下のとおりです。

  1. 私は6に私のトピックパーティションを設定し、私は唯一の3ブローカインスタンスを持っている場合はどうなりますか。どのブローカインスタンスがパーティション1〜6のリーダーになるでしょうか?

  2. 必要なパーティションの数を決定する式はありますか?これが私たちのテスト環境だったので、それを使って遊ぶことができ、それを拡大することができました。私たちは、私たちの生産環境で同じことをすることができないかもしれません。だからどのようにパーティションのサイズを決定する?

答えて

2

パーティションは、ブローカー間で分散します。どのブローカーが特定のパーティションのリーダーに選ばれるのかを知ることは不可能であり、時間とともに変化する可能性があります。どのバージョンのKafkaとどのコンシューマーAPIを使用するかによって、コンシューマーは独自のパーティションリーダーを発見することもあれば見つからないこともあります。 SimpleConsumerでは、あなた自身でパーティションリーダーを見つけて、(APIによって自動的に処理されるのではなく)コード内の新しいリーダー選挙に対応する必要があります。

パーティションの数に関しては、これ以外の実際の「数式」はありません。パーティションを持つよりも並列性はなくなります。 4つのパーティションと5つのコンシューマがある場合、消費者のうちの1人は飢えています。私は通常、大規模なトピックのパーティション数に12または60またはその倍数のような数値を使用します。さまざまな消費者の間で簡単にそしてきれいに分けるもの。

また、後でパーティションの数を変更することができますが、いくつかの注意点があります。どのように注意点があるかについては、this answerを参照してください。

+0

私の質問は、どのブローカーがリーダーパーティションを持っていたのでしょうか?私はここに6つのパーティションと3つのブローカーを持っています。したがって、各ブローカーはリーダーパーティションとして2つのパーティションを持っていますか? – sparkr

+0

はい、それらはバランスをとります。それを試してみてください。また、トピックを作成するときに実行されているものによって異なります。 1つのブローカーしか実行されていない場合、そのブローカーに指導者を与えるだけです。そして、2番目のブローカーを元に戻すと、自動的にパーティションのリーダーを再調整することはできません。これを制御する設定(ヘッドの頭上を思い出さないでください)とコマンドラインツールを使用して、再バランスを強制したり、設定のアンバランスを解消したりします。 –

関連する問題