2016-04-19 7 views
0

私はApache Kafka documentationを読んで、カフカとは何か、そしてそれを私のアプリケーションでどのように使うことができるかについての最初の記事を読んでいます。しかし、私はこの時点で非常に混乱しています。Apache Kafkaの利用規約

パーティションとブローカの違いを理解できません。

カフカは信頼性のための複製要素を提供します。複製されたデータは同じマシンに存在しますか? {Highレベル、Lowレベル} + {プロデューサ、コンシューマ}

違いカフカは、消費者の位置を記憶していない場合、それを保存する最良の方法は何ですか?人々はデータベースを使用するか、それをローカル情報としてクライアントに格納することができます。

KafkaとNodeJSを使ってpub-subシステムを構築するのは良い考えです(データのための残りのAPIを提供するため)?

誰でもこの方向に私を導くことができますか?解決策をより効果的に提供するのに役立つ他の関連情報を追加したい場合は、ご意見ください。

ありがとうございます。

答えて

2

これは私のカフカの知識を盛り上げる良い機会だったので、これはちょっと残っていればごめんなさい。

ここでのほとんどの回答は、リンク先のドキュメントまたは関連ドキュメントを参照することによって得られます。

Node.jsで作業したいと述べたので、I will include some references to the arguably best (to my knowledge) Kafka 0.9.0 client no-kafkaと最後のセクションでもそれについて話し合ってください。

質問1

私は、パーティションやブローカー

  • ブローカーの違いを理解することができません:

    ブローカーは、カフカのインスタンスを実行しているサーバーで、導入によって述べられているように:

    Kafka is run as a cluster comprised of one or more servers each of which is called a broker.

  • パーティション:

    あなたがトピックから/へのメッセージを公開し、消費します。トピックを分割することができます.1つ以上のブローカでクラスタを実行している場合、パーティションはブローカ(カフカサーバ)に配布されます。

    Each partition is an ordered, immutable sequence of messages that is continually appended to...

    これは、高スループットのトピックの負荷を分散することができます

    。必要に応じて、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で重い作業のプロトタイプを作成することさえできます。

関連する問題