これは私のカフカの知識を盛り上げる良い機会だったので、これはちょっと残っていればごめんなさい。
ここでのほとんどの回答は、リンク先のドキュメントまたは関連ドキュメントを参照することによって得られます。
Node.jsで作業したいと述べたので、I will include some references to the arguably best (to my knowledge) Kafka 0.9.0 client no-kafkaと最後のセクションでもそれについて話し合ってください。
質問1
私は、パーティションやブローカー
質問2
カフカは、信頼性の複製因子を提供します。複製されたデータは同じマシンに存在しますか?
単純なサーバークラッシュに耐えられなかったため、同じマシンで複製した場合、いいえ、それは最高でも疑いがあります。レプリケーションファクタは、トピックの各パーティションが複製されるブローカ(サーバ)の数を決定します。したがって、--replication-factor 3は、各パーティションが3つのブローカー上にあり、それらの1つがリーダー(読み取り/書き込みを受け入れる)と残りの2つがリーダーを複製し、現在のリーダーが失敗した場合に自動的にリーダーの状態を受け入れる準備ができていることを意味します。レプリケーションファクタは、トピックを作成するときにクラスタ上のブローカの数よりも小さくなければならない(MUST)。
導入から
:あなたはどんな理由であれ、多分別のディスクまたは何かに(その上で複数のブローカーを実行することにより、一台のマシン上で多くのレプリカを得ることができる
For a topic with replication factor N, we will tolerate up to N-1 server failures without losing any messages committed to the log.
)。
質問3
{ハイレベル、ローレベル} + {プロデューサー、コンシューマー}
の違いだけプロデューサーのAPI(レガシーScalaのクライアントが存在するが本当にあり)。 3つのコンシューマーAPIがあります。古い高レベルと低レベルのAPIと新しい統一API。 Kafka 0.9.0以降を使用している場合は、新しい統一APIを使用することをお勧めします(開始する場合は、そうなるでしょう)。これには、古いコンシューマーAPI(0.9.0で導入されたセキュリティ機能など)では利用できない新しい機能が含まれています。古いAPIを必要としません(選択したライブラリが新しいAPIをサポートしていない場合を除きます。スイッチする必要があります)。
no-kafkaは、iircが古い低レベルAPIをモデル化するSimpleConsumer APIをサポートします。シンプルなテストには適していますが、GroupConsumer API, which uses the new unified APIを強くお勧めします。その強みの1つ(コミットするオフセット)は、次の質問との関連で議論されます。
質問4
カフカは、消費者の位置が格納されていない場合は、それを格納する最善の方法は何ですか?人々はデータベースを使用するか、それをローカル情報としてクライアントに格納することができます。
とにかく(ディスクなどで)必要に応じて保存できます。新しい統合コンシューマAPIは、コンシューマのオフセット(送信されたメッセージ)を自動的に保存します。消費者はメッセージを正常に処理した後で最新の処理済みオフセットをコミットする必要があります(consumer.commitOffset in no-kafka GroupConsumer)。したがって、再起動後などにコンシューマに再接続した場合は、自分が未使用とマークした最新のメッセージが表示されます。
これは、新しい統一コンシューマーAPIを使用する多くの優れた理由の1つです。
オフセットは、可用性の高い(複製された)パーティション化されたトピックに格納され、Kafkaによってキャッシュされます。 You can also configure the options for offset saving (search for options with offset. or offsets. behind this link.
Kafkaが設定などの分散サービスに依存するサービスであるZooKeeperへのコンシューマーオフセットをコミットするのに使用されていますが、ZooKeeperは多くの書き込みに対して拡張性がなく、KafkaのAPIから抽象化されています。これは、SimpleConsumer in no-kafkaがそのオフセットも保存する方法です。
質問5
です(データ用、残りのAPIを提供するために)カフカとのNode.jsとパブ・サブシステムを構築するのは良いアイデアはありますか?
これを行うことに何も問題はありません。私は最近、Node.js + Kafkaでいくつかのデモを行い、それを徹底的に楽しんでいます。上記のように、Kafka> 0.9の場合はno-kafkaライブラリをお勧めしますが、0.9より下位互換性があるので、より古い(for> 0.8)kafka-nodeも同様に動作します。他にはないから、統合されたConsumer APIをサポートするためにno-kafkaを選択します。
Node.jsを使用してクライアント側のインターフェイスを作成するだけでなく、ライトストリーム処理(たとえば、収集されたイベントを豊かにして再フォーマットする)を簡単に実行することもできます。おそらくカフカのログをデータベースにフォーマットするかもしれません。
リソース管理の実装やフォールトトレランスなどが重要な仕事であり、そのようなタスクのための優れたストリーム処理フレームワーク(Samza、Sparkなど)が存在するため、Node.jsを使用すると、 。はい、彼らは異なる言語ですが、おそらくあなたに適したフレームワークを見つけるでしょう。パフォーマンスの良い、最適化されたノードアプリケーションの開発とデプロイメントに精通している場合は、おそらくNode.jsで重い作業のプロトタイプを作成することさえできます。