話カフカ作品

注:この記事はより転載https://www.cnblogs.com/sujing/p/10960832.html

なぜ我々は、メッセージキューが必要なのか

携帯電話での週末退屈ブラシは、宝ネットAPPが突然「ガールフレンド1は、今日だけつの活性を取得購入、顧客に返済するために!」というメッセージを飛び出します その後、私は見逃すことはできない、人はこのような良いものを取得購入があります!私は助けるが、すぐに行くように命じたことができませんでした。その後、一度に2つの最新モデル、順序、賃金を選びました!ベッドに会う、すぐにガールフレンド、さらに幸せな睡眠を持って考えて......

通常のクラスの二日目に、突然、宅配便の弟の電話を受けました。

リトル・ブラザー:「あなたはそれについて来るのを、あなたはxxはあなたのガールフレンドにやるさ、と私はあなたに階下よ?!。」

私:「これは私が仕事に行く......で、あなたは夜にそれを乗り越えることができます?。」

リトル・ブラザー:「ああ、ない夜に、と私はあまりにも夜に仕事を降りました!」

だから、二人は長い間膠着状態......

最後に、弟は言った、または他の私は、あなたはそれがXiaofang、コンビニエンスストアを階下に置くに役立つ、この厄介な状況を緩和するために、夜に来て、仕事からあなたを得ることができます!
  
次のように戻るトピックに、弟と私の相互作用図を表現していない場合Xiaofangのコンビニエンスストアは、次のようになります。

IMG

次に何が起こりますか?

  1. この少女のために、私は戻って(上司が許可されていない)を取得しておきます。
  2. 弟はあなたが階下(他の宅配便を送信するために弟を)持っています。
  3. 週末には、(明らかに待つことができない)を送ります。
  4. 私は(絶対に不可能)このガールフレンドをしたくありません!

Xiaofangのコンビニエンスストアは、次のように相互作用図であるべき、表示されます。

IMG

上記の例では、「エクスプレス弟」と「私のガールフレンドを買う」2つのシステムが相互に作用する必要がされ、コンビニエンスストアXiaofangこの記事は、私たちが言いたいことである - 「メッセージングミドルウェアを」Xiaofangのコンビニダウン要約(メッセージミドルウェアを指向)次のような利点が表示されます。

デカップリング

急行を送信するために多くのニーズを持っている弟を表現し、彼は常に利用可能な場合、電話11荷受人、利用可能な時間の何期間を確認し、[良い配信プログラムを決定する必要があります。荷受人にそう完全に依存!複数の宅配便の場合は、コンビニエンスストアを持っている場合は、ちょうど同じコンビニで同じセルを表現し、それに拾うために荷受人に通知する必要が弟を表現......弟が忙しいクレイジー推定表明今回は弟とデカップリングの実現に荷受人を表現します!

非同期な

私は他の人に彼を送信するためにあなたの宅配便を取るまでは、階下を待っていneed've後に私を呼ん弟を表現しています。宅配便はXiaofangのコンビニエンスストアで弟を発現し、行くために他の仕事をすることができた後は、待機状態にあった到着を待つ必要はありません。作業効率を向上させます。

クリッピング

私偶然には、彼らの両方が同時に到着した......同じではありません、パス、タクト、シェントン、トン、その他様々であり異なる用品店の様々なを購入する二から一一を想定し、速達便は、これらの店舗はどうなりますアップ!小さな携帯電話でコタパスが配達を取るために、北ゲートに行くために私に言った、Yuantong弟が南門を行くように私に言った、シェントン弟は東門に行くために私に言いました。私は時々急い......

我々のシステムのニーズがシーンと対話することを見ることができ、ミドルウェアメッセージキューの使用は、この考え方に基づいて、実際には多くの利点が、巣の豊富があり、新人イン幾何Xiaofang、コンビニエンスストア、より専門的な「ミドルウェア」 。

最後に、上記の話は純粋に架空のです......

メッセージキューの通信モード

  
私たちはメッセージミドルウェアを引かれ、そしてメッセージキューが表示さの利点を説明している上記の例として、二つのモードは、ここでは、メッセージキューを通信する必要があると述べました。

ポイントモードへのポイント

IMG

上記のように、アドホックモードは、典型的には、モデルのメッセージングまたはポーリングを引く、このモデルは、キューのみコンシューマ・プロセスに送信されたメッセージによって特徴付けられます。後に生産者は消費するメッセージを引っ張って、消費者の主導で、メッセージキューにメッセージを置きます。周波数が引き上げモデルの消費者のポイントの利点は、独自のメッセージによって制御することができます。しかし、メッセージがある場合、メッセージキューは、最終消費者が知覚できない、消費する必要があるので、消費者は監視を終了するには、余分なスレッドが必要です。

公開されたサブスクリプションモデル

IMG

上記のように、モデルをメッセージングは​​、メッセージに基づいて送信モデルであるサブスクライブパブリッシュ、モデルは、多くの異なる加入者に変更されてもよいです。生産者は、メッセージキューにメッセージを入れた後、メッセージキューは、メッセージクラスの消費者(同様のマイクロチャネルパブリック数)を介して加入者にプッシュされます。それは受動的な消費者がプッシュを受けていないので、メッセージキューが消費されるかどうかのない感覚ですので!しかしconsumer1、consumer2、consumer3メッセージを処理する能力が異なることになるので、マシンの性能は、同じではありませんので、メッセージキューことはできません感じる消費者支出率!だから、放出速度が問題サブスクリプション波モードとなり押し!プッシュキュー5M / sの速度は、それがconsumer3を買う余裕ができない場合は3つの消費者の取り扱い速度は8M / Sだったと仮定し、5M /、2M / S、S!2M / sの速度をプッシュキューは、consumer1であれば、consumer2は資源の膨大な廃棄物になります!

カフカ

メッセージキューとメッセージキューの通信、我々はこの記事の主人公に行ってきました次回のデビュー--kafkaなぜ2つのモードの上記の簡単な紹介!

カフカは、高性能、耐久性、マルチコピー、バックアップ、いくつかの基本的な能力スケールアウトして、データの消費者規模なサイトをストリーミングすべてのアクションを処理することができ、分散パブリッシュ・サブスクライブ・メッセージングシステムの高スループットである.........ここで行われていない、インターネットは読者が百度にそれを所有することができ、これらのあまりに多く導入しています!

インフラと用語

いくつかの単語の男は、マップを見ては、私たちはこの絵を通ってくると脳卒中の関連する概念間の関係を撫で、言いました:

IMG

あなたはこの絵を見た場合、あなたは非常に無知な力、木材の関係です!私たちは、最初に関連する概念を分析します。

プロデューサー:即ちプロデューサプロデューサプロデューサ、メッセージは、メッセージは、入口です。

カフカのクラスタ

  • ブローカーは:ブローカがカフカのインスタンスで、各サーバーでカフカ1つ以上のインスタンスを持って、私たちはブローカーサーバーに各対応していることを前提としています。各クラスタ内のカフカブローカーが固有のIDを有し、ブローカ-0のようなブローカー-1で示されるように......    
  • トピック:メッセージの件名は、メッセージがカフカデータは、トピックに保存され、分類として理解することができます。あなたは、各ブローカ上の複数のトピックを作成することができます。
  • パーティション:トピックパーティション、各トピックは、複数のパーティションを持つことができ、パーティションアクションはカフカのスループットを向上させるために、負荷を行うことです。データの異なるパーティションで同じ話題が繰り返されていない、フォームパーティションはフォルダがあります!
  • レプリケーション:各パーティションの役割は、コピーはスペアタイヤを作っている、複数のコピーを持っています。ときにスペアタイヤを選択しますプライマリパーティション(リーダー)障害が(フォロワー)の勝利、そしてリーダーとなりました。カフカデフォルトでコピーの最大数は10で、部数は別のマシンに間違いなくあるブローカー、フォロワーとリーダーの数を超えることはできません、同じパーティション上の同じマシンには、(私を含め)のみのコピーを保存することができます。
  • メッセージ:メッセージ本体のそれぞれで送りました。

消費:消費者、消費者のメッセージ、メッセージがエクスポートされていること。

グループの消費者:私たちは、個人消費のカフカのデザインで、同じデータ・パーティションのみが消費者の特定の基であることができ、消費者のグループまでの複数のセットを消費することができます。同じコンシューマ・グループの消費者は、カフカのスループットを向上させることにある話題の異なるパーティションで同じデータを消費することができます!

ZooKeeperの:カフカは、システムの可用性を確保するために、メタ情報のクラスタを保存するために、ライブ依存のZooKeeperクラスタに使用しました。

ワークフロー分析

あなたは問題まだ比較的無知でない場合は何もカフカは、一般的な印象を持っていないがある読めば上記カフカのインフラストラクチャと基本的な概念を説明し、知りません!私たちは、次のワークフローカフカ上記構造チャート分析と組み合わせ、そして最終的に戻って全体の櫛にそれは再び私はあなたがより達成すると信じて!

データを送信します

私たちは、上記のアーキテクチャ図を見て、プロデューサーがプロデューサーで、データのエントリです。図中の注意事項は、矢印を赤データの書き込み時のプロデューサーは、常にリーダーを探している、フォロワーに直接書き込みされていないデータを行います!そのリーダーが行うどのように見つけますか?プロセスを書くと、それをどのような?私たちは見て:

IMG

フロー図に送信され、個々の文字に記載されていない、説明してきました!もう一つ注意すべきは、メッセージがリーダー書かれているイニシアチブのリーダーにフォロワーで同期させることです!プロデューサーの用途は、各メッセージは、順序がディスクに書き込まれているパーティションに追加されるので、注文された同じゾーンにそのデータを確保するために、モードデータがブローカーにリリースされます押してください!次の図を書きます:

IMG

上述したように、データは、なぜそれを行うカフカというパーティション、別のパーティションに書き込まれていますか?私たちは推測している必要があると信じて、ゾーニングの主な目的は、次のとおりです。

  1. 拡張を容易にトピックが複数のパーティションを持つことができるので、私たちは簡単に機械を拡張することで、データ量の増加に対処するために行くことができます。
  2. 並行性を向上させますパーティションに読み書きユニットが同時に消費データにおける複数の消費者、メッセージの処理効率であることができます。

身近な友人をロードバランシングは、私たちがサーバーにリクエストを送信するとき、サーバは負荷をするように頼まれるかもしれない複数のトピックのパーティションがある場合、トラフィックは、そのカフカに、別のサーバに分散されることを知っている必要があります、プロデューサー、どのデータがそれに送られたパーティションを知っていますか?カフカは、いくつかの原則があります。

  1. パーティションパーティションは執筆の時点で書き込まれるように指定することができ、指定された場合、対応するパーティションが書かれています。
  2. パーティションを指定したが、キーデータの設定されていない場合、パーティションはの値に応じてキーをハッシュします。
  3. どちらも、パーティション、ノーセットキーを指定した場合、ポーリングは、パーティションを選出します。

失われていないメッセージは、カフカへのメッセージを書いている時点で、そのプロデューサのメッセージ・キューミドルウェアの基本的な保証であることを確認するために、どのようにメッセージがそれを失っていないことを確認するには?実際には、ACKによる応答メカニズムがあること、それを説明した上でフローチャートを書きます!プロデューサーのパラメータは、データのセットカフカ確認受領することができるかどうかを判断するためにキューにデータを書き込む場合は、このパラメータの設定があり、すべての0,1

  • 0は、クラスタにデータを送信するためのプロデューサーは、メッセージが正常に送信されていないことを確認し、クラスタの復帰まで待つ必要はありません表します。しかし、最も安全性の最大効率。
  • クラスター1は、念のリーダーが正常に送信させる、リーダーが応答を送信することができます限り、データを送信するプロデューサーを表します。
  • データクラスタを送信するためにプロデューサーに代わってすべては、同期からフォロワーのすべてを完了するために必要なすべて完了したバックアップの成功リーダーとセンドのコピーを確保するためにリーダーを送信します。最も安全な、しかし最も効率的。

書き込みデータにトピックが存在しない場合は最後に、ノート、成功に書き込むことができないということ?カフカ自動的にパーティションのコピーによると、トピックの数を作成し、デフォルトの設定は1です。

保存データ

データはプロデューサーカフカ書き込まれた後、データのニーズにクラスタを保存します!カフカディスクに保存されたデータ、それは一般的に私たちの認識であってもよく、それがディスクに書き込まれるが、比較的時間のかかる操作、高い同時実行のそのような構成要素には適していません。カフカは、最初にデータを順次(ランダムよりも高い書込み効率が)書かれている、別のディスク・スペースを開きます。

パーティション構造

各トピックは、1つまたは複数のパーティションに分けることができます前に、私が述べたように、あなたがトピックは、より抽象的であると思われる場合、そのパーティションは、より具体的なものです!サーバー上のパーティションの症状は、フォルダ、セグメントファイルの以下の複数のセットを持つことになり、各パーティションのフォルダで、各セグメントファイルも.INDEXファイル、.logファイル、.timeindexファイルを(以前のバージョンが含まれていませんでした)3つのファイルが、ログファイルには、メッセージを取得するためのインデックスファイルとtimeindexに実際の場所のメッセージ、およびインデックスファイルに保存されます。

IMG

上記のように、このパーティション・セグメント・ファイルの三つのグループがあり、各ログファイルのサイズが同じであり、その数は、必ずしも格納されたメッセージ(各メッセージのサイズが矛盾している)に等しくありません。ファイルは368795件のメッセージ、カフカに0からのオフセット000.indexストレージは効率の問題を解決する方法を見つけるためにセグメント化された+インデックスの使用であるとして、オフセットは最小限という名前のセグメントに基づいて名前を付けます。

メッセージ構造

ログファイル、上記の実際のメッセージの場所を保存するだけでなく、どのように見えるかでログに保存されているプロデューサーで書かれたカフカのメッセージに私たちの1、メッセージは?主なメッセージが含まれているメッセージ本体、メッセージサイズ、オフセット、圧縮タイプ......というように!我々は、次の3つの焦点知っている必要があります:1、オフセット:オフセット総オーダーID番号8バイトであり、それは一意parition内の各メッセージの位置を決定することができます!図2に示すように、メッセージ・サイズ:4バイトのメッセージサイズは、メッセージサイズの記述を占有します。図3は、メッセージボディ:メッセージ本体が実際のメッセージ・データ(圧縮)に格納され、特定のメッセージに依存することなく同じ空間を占めます。

ストレージポリシー

かかわらず、メッセージが消費されているかどうかの、カフカは、すべてのメッセージを保存します。だから、古いデータの削除ポリシーを何?

  • 時間に基づいて、デフォルトの設定では168時間(7日)です。
  • デフォルトの設定のサイズに基づい1073741824です。

カフカは、特定のメッセージの時間複雑性はO(1)で読み、ことを注意するので、削除古いファイルここでは、カフカのパフォーマンスは向上しません!

消費データ

メッセージは、ログファイルに保存された後、消費者が消費することができます。私たちは、メッセージキューの通信の二つのモードについて話すとき、アドホックモードの上に話し、サブスクリプションモデルを公開します。カフカがポイントモードにポイントを使用して、消費者は、消費者がメッセージにもプルにリーダーを見つける引くときのプロデューサーは、同じである、カフカクラスタプルメッセージを行くためのイニシアチブをとります。

消費者は、消費者のグループ(コンシューマ・グループ)以上のものを作ることができ、各グループは、消費者のグループIDを持っています!同じコンシューマ・グループの消費者はなく、同じグループより消費支出データパーティション内の、同じトピックの異なるパーティション内のデータを消費することができます!それはついておりません。私たちは見て:

IMG

消費者は、その消費者支出データパーティションのより多くのケースがあるだろう、例数よりも小さくなっているコンシューマ・グループのパーティションに図示されているが少ない消費者のハンドルの消費だけつのパーティションの処理速度のレートよりもです!消費者は、消費者のグループは、より多くのパーティションの数を超えました場合は、パーティション、それをより多くの消費者支出データを表示されますか?既に述べたように、これは発生しません!余分な消費者は、データの任意のパーティションを消費しません。だから、実際のアプリケーションでは、それが推奨される消費者団体の消費者のパーティション番号と一致して

内部に格納されたデータのセクションでは、我々は、パーティション・セグメントに話を複数のグループに分割され、各セグメントも含む各メッセージに格納されているの.log、.INDEX、.timeindexファイルは、オフセット、メッセージのサイズ、メッセージ本体を含む......我々が繰り返し有します上記のセグメントとオフセットは、時間がどのようにそれの表情でセグメントオフセット+を使用してメッセージを見つけることですか?オフセットは、現在のメッセージ368801を見つける必要がある場合はどのようなプロセスでありますか?以下のチャートで見てみましょう:

IMG

  1. 最初のファイルが368801messageのオフセットセグメントを見つける(バイナリ検索を使用)、第2セグメントファイルにここで発見されました。
  2. 、368796.indexファイルセグメントは368796 + 1のオフセットで始まるファイルで発見されたオープン.INDEXファイル(、私たちはインデックスのオフセットメッセージ368801を探しているオフセットは368 796 + 5であります= 368801、ので、ここであなたが探している相対オフセット)5。ファイルは、スパースインデックスがメッセージに対してオフセットと物理間の対応関係は相対未満のオフセットまたは指定されたに等しい同一のバイナリ検索を使用して、見つけることができないオフセット及びインデックス5に直接に対してオフセット方法で格納されているので索引項目の相対オフセットので、インデックス4のための相対的なオフセットを求めるオフセット最大相対こと。
  3. 物理の4位置を見つけるためのインデックス256をオフセットとして相対オフセット記憶されたメッセージを決定します。それはメッセージを相殺するために368801の作品を見つけるまで256シーケンシャルスキャンを開始する場所に場所からデータファイルを開きます。

このメカニズムは相殺されるに基づいて使用に基づいて順序付けセグメント+オフセット+見つける整然としたスパースインデックス+ +バイナリ検索シーケンスデータを効率的に見つけるために他の手段を!この時点で、消費者が処理され、処理されるデータを取得することができます。つまり、各消費者が自分の消費のための場所を記録する方法ですか?以前のバージョンでは、消費者が消費者のレポート、でメンテナンス飼育係を相殺するための時間間隔ごとたら、簡単にここで過ごすの重複につながる消費され、パフォーマンスが良くありません!消費者支出を相殺するために、新しいバージョンでは、このトピックの__consumer_offsets kafkクラスタ内で直接維持されてきました!


おすすめ

転載: www.cnblogs.com/chloneda/p/kafka-theory.html