web-dev-qa-db-ja.com

Apache kafkaでトピックを作成する方法は?

Kafkaでトピックを作成する最善の方法は何ですか?

  • トピックを作成するときに定義されるレプリカ/パーティションの数は?

新しいプロデューサーAPIで、既存のトピック以外にメッセージを発行しようとすると、最初は失敗し、その後正常に発行されます。

  • レプリカ、パーティション、クラスターノードの数の関係を知りたいです。
  • メッセージを公開する前にトピックを作成する必要がありますか?
19
Ratha

Kafkaブローカーを開始するとき、conf/server.propertiesファイル。このファイルは単なるキー値プロパティファイルです。プロパティの1つはauto.create.topics.enable、trueに設定されている場合(デフォルト)Kafkaは、存在しないトピックにメッセージを送信するときにトピックを自動的に作成します。

見つけることができるすべての設定オプションは here と定義されています。私見、トピックを作成するための簡単なルールは次のとおりです。レプリカの数は、所有しているノードの数以上でなければなりません。トピックの数は、クラスター内のノードの数の乗数である必要があります。次に例を示します。

  • 9ノードのクラスターがあります
  • トピックには、9つのパーティションと9つのレプリカ、または18のパーティションと9つのレプリカ、または36のパーティションと9つのレプリカなどが必要です...
31
ponkin

1つのパーティションはコンシューマグループ内の1つのコンシューマのみが使用できるため、パーティション番号はトピックの並列処理を決定します。たとえば、トピック用のパーティションが10個、コンシューマグループ内のコンシューマが20個しかない場合、10個のコンシューマはアイドル状態になり、メッセージを受信しません。実際の数はアプリケーションによって異なりますが、1〜1000がすべて妥当です。

レプリカ番号は耐久性の要件によって決まります。レプリケーション係数Nのトピックの場合、Kafka=は、ログにコミットされたメッセージを失うことなく、最大N-1台のサーバー障害に耐えることができます。3つのレプリカが一般的な構成です。もちろん、レプリカ番号はブローカー番号以下である必要があります。

auto.create.topics.enableプロパティはKafka=サーバーでのトピックの自動作成を有効にします。これがtrueに設定されている場合、アプリケーションが生成を試みるとき、消費します、または存在しないトピックのメタデータを取得すると、Kafkaはデフォルトのレプリケーション係数とパーティション数でトピックを自動的に作成します。本番環境ではオフにし、事前にトピックを作成することをお勧めします。

17
Lan

ブログで説明した最近の経験を共有したい フェッチの副作用Kafkaトピックメタデータ そして、特定の回答ここに質問があります。

1)kafkaでトピックを作成する最良の方法は何ですか?メッセージを公開する前にトピックを作成する必要がありますか?

固定名Kafka=トピックを事前に使用することを知っている場合は、トピックを作成したり、メッセージを書き込んだり読み取ったりすることをお勧めします。 bin/kafka-topics.shを使用した起動後スクリプトで、たとえば 公式ドキュメント を参照してください。または KafkaAdminClient を使用できますKafka 0.11.0.0で導入されました。

一方、その場でトピック名を生成する必要がある特定のケースがあります。これらの場合、固定トピック名を知ることができず、「auto.create.topics.enable」プロパティに依存できます。有効にすると、トピックが自動的に作成されます。これにより、2番目の質問が表示されます。

2)auto.create.topics.enableがtrueの場合、どのアクションが作成を引き起こすか

実際、@ Lanが既に指摘したように

これがtrueに設定されている場合、アプリケーションが存在しないトピックのメタデータを生成、消費、またはフェッチしようとすると、Kafkaは自動的にデフォルトのレプリケーション係数とパーティション数でトピックを作成します。

もっとシンプルにしたい:

Kafkaブローカーに対して自動トピック作成が有効になっている場合、Kafkaブローカーが特定のトピック名を見ると、そのトピックはまだ存在しない場合は作成されます

また、メタデータを取得することでトピックが自動的に作成されるという事実は、私を含めて見過ごされがちです。この特定の例は、consumer.partitionFor(topic)APIを使用することです。このメソッドは、指定されたトピックが存在しない場合に作成します。

上記の詳細に興味のある方は、この同じトピックに関するブログ投稿もご覧ください The Fetchingの副作用Kafkaトピックメタデータ

2
techpoolx

Kafka=の基本レベルの並列処理はパーティションです。プロデューサー側とブローカー側の両方で、異なるパーティションへの書き込みは完全に並列に実行できます。

留意点

  • より多くのパーティションにはより多くのオープンファイルハンドルが必要
  • パーティションを増やすと使用不可になる可能性があります
  • パーティションを増やすとエンドツーエンドのレイテンシが増加する可能性があります

経験則として、ブローカーごとのパーティションの数を100 x b x rに制限することをお勧めします。bはブローカーの数、rは複製係数です。

例:クラスターに9つのブローカー/ノードがある場合、トピックは

  • 3つのレプリカを持つ1800パーティション、または
  • 900個のパーティションと2個のレプリカ

EDIT:記事を参照 Kafkaクラスタ内のトピック/パーティションの数を選択する方法? 詳細については(回答はそこから取られています)

1

プロパティを設定しますauto.create.topics.enable=true server.propertiesファイルで、複数のブローカーがすべてのserver * .propertiesファイルに対して同じことを行い、kafka-serverを再起動する場合。ただし、必ずserver * .propertiesで適切な番号のパーティションを設定してくださいnum.partitions=int、それ以外の場合、後でパーティションを増やすとパフォーマンスの問題が発生します。

1