カフカ一般的な紹介
背景
カフカはもともとScalaの言語を使用して、LinkedInのが開発した、カフカが分散し、パーティション化、マルチコピー、マルチ加入者ロギングシステム(MQ分散型システム)、ウェブ/ nginxのログ、検索ログに使用することができています、監視ログ、アクセスログなど。
その上でJavaやPython、C ++、PHPと:カフカは、現在クライアントのさまざまな言語をサポートしています。
カフカ用語集と作品:
プロデューサー:ニュースのプロデューサーは、カフカブローカーメッセージクライアントにあります。
消費者:ニュースの消費者は、カフカブローカークライアントにニュースを得ます
トピック:メッセージのトピック。
コンシューマ・グループ(CG):これはカフカがブロードキャスト(すべての消費者に送信された)メッセージとユニキャストを実装するために使用トピックである(すべての消費者が発行した)を意味します。トピックは、CGを複数有していてもよいです。CGで消費者にCGの全てのメッセージのコピーのトピック(ない真のコピー、概念的である)が、それぞれの意志だけCGメッセージ。あなたがいる限り、各消費者がその上に独立したCGを持っているとして、放送をしたい場合。同じCGでのユニキャスト、消費者のすべての限り達成するために。消費者は、異なるトピックに複数回送信されるCGメッセージなしに自由にすることによってグループ化することができます。
ブローカー:カフカサーバーがブローカーです。ブローカーの複数からなるクラスタ。ブローカーはトピックを複数受け取ることができます。
パーティションは:スケーラビリティを達成するために、非常に大きなトピックは複数のブローカー(すなわち、サーバ)に分配されてもよい、トピックはパーティションに分割することができ、各パーティションは、順序付けられたキューです。パーティションは、各メッセージは、逐次、ID(オフセット)が割り当てられます。カフカ消費者へのメッセージで唯一のパーティションは、全体のトピックシーケンス(間のパーティション)を保証するものではないことを確実にするため。
オフセット:利点を見つけるのは簡単ですオフセットの名前をどうするoffset.kafkaに応じカフカ保存されたファイルに名前が付けられます。たとえば、あなただけのファイルの2048.kafkaを見つけ、2049年に場所を見つけたいです。もちろん、最初のオフセット00000000000.kafkaです
カフカの特性:(提案より抽象的なを書く再修正の後ろ)
OによってL(1)ディスクのデータ構造は、メッセージの保存安定性のためのTBの数が長く維持することができる場合でも、この構成では、メッセージの永続性を提供します。
lのハイスループット:でも、ごく普通のハードウェアカフカも秒あたりのメッセージ数十万人をサポートすることができます。
Lサポート同期および非同期複製HAの二種類
システムコールのsendfile、ゼロコピー、プルアップデータ量を用いてリットル消費者クライアントプル、ランダム読み取り、
クライアントに保存されているリットル消費状態
lの書き込みメッセージの格納順序
L個のデータ移行、ユーザーに対して透過的膨張
LのHadoopは、並列データローディングをサポートします。
Lサポート、オンラインとオフラインのシナリオ。
リットルの永続性:永続ハードディスクの複製にデータやデータの損失を防ぎます。
lはスケールアウト:マシンの展開をダウンタイムなし。
lは定期的に保持時間を設定し、セグメントファイルパーティションをサポートするためのメカニズムを削除します。
信頼性(一貫性)
カフカ(MQ)は、生産者と消費者への分配の間に信頼性の高いメッセージ転送を達成します。伝統的なMQシステムは、典型的には、ブローカに記憶されている消費者と実装(ACK)機構、分布およびステータスメッセージとの間のブローカによって確認されます。
たとえそうであっても一貫性(元を参照)を確保することは困難です。カフカのアプローチは、消費者自身、また任意の確認により、状態を保存することです。この消費者の負担がさらに重くますが、実際にはより柔軟です。
かかわらず、メッセージを再処理する必要が消費者の結果にどのような理由の、あなたは再びブローカーから入手することができますので。
kafakのシステム拡張
ダイナミッククラスタの拡張を使用するには、カフカの飼育係は、クライアント(生産者と消費者)の設定を変更する必要はありません。ブローカは、飼育係に登録し、更新の関連メタデータ(トピック、パーティション情報など)を維持します。
そして、クライアントは、飼育係に関連するウォッチャを登録します。飼育係が変化すると、クライアントは、速やかに認識し、それに応じて調整することができます。これは、自動負荷分散の中で、まだブローカー、ブローカーを追加または削除するときにことを保証します。
カフカの設計目標
ハイスループットは、そのコア設計の一つです。
ディスクデータの永続性:メッセージは、ディスクに直接書き込むシーケンシャルリードをフルに活用し、ディスクのパフォーマンスを書くために、メモリキャッシュではありません。
リットルゼロコピー:IO削減段階。
Lサポートバルクデータ伝送と引っ張ります。
Lサポートデータ圧縮。
Lトピックがパーティションに分割され、並列処理能力が向上します。
プロデューサーの負荷分散とHAのメカニズム
ユーザによって指定されたプロデューサアルゴリズムは、指定されたパーティションにメッセージを送信します。
複数のpartiitonは、各パーティションは、それ自身の複製、異なるノードブローカにわたって分散各レプリカを有しています。
パーティションを複数選択すると、リードパーティションがフェイルオーバーの責任飼育係による読み取りと書き込みを担当し、リードパーティションが必要です。
動的飼育係管理ブローカーと消費者との休暇を加えることで。
消費者のプル機構
そのため、永続データの意志カフカブローカー、無加圧cahceブローカー、したがって、消費者の消費データは以下のように特に具体的なプルを取るために、より適切な方法:
カフカは、設計を簡素化する困難さを軽減します。
消費者の消費者の独立した制御メッセージ引き上げ速度の性能。
消費者は、彼らの消費、バッチなどのパターン、繰り返し消費に応じて選択したパーティションまたはその上の位置(オフセット)との開発から支出を開始します。
消費者と話題の関係とメカニズム
トピックカフカは、本質的に、各コンシューマ・グループの消費者の一部のみをサポート;.逆に、各グループは、特定のトピックのメッセージに対する消費者の複数を有していてもよいです。
各消費者は唯一のコンシューマ・グループは、このトピックに登録され、このメッセージは、より多くの消費者のグループに送信されることはありません。そして、すべての個人消費のグループは、トピック全体ずらしされます。
すべてが同じコンシューマ・グループ、JMSキュー、およびパターンのように、このような状況を持っている場合は、メッセージが消費者の間で負荷分散されます。
すべての消費者は、これが「パブリッシュ - サブスクライブ」であることを、別のグループを持っている場合、メッセージはすべての消費者に放送されます。
カフカでは、メッセージのパーティションにのみコンシューマ・グループ(同じ時間)の消費者になります。お互いの消費者のニュース消費独立した内の各グループ。我々はグループが誰「サブスクリプション」であると言うことができます
トピック各partionsは、消費者は、消費者「加入者」になりますが、消費者は、同時にメッセージに複数のパーティションを消費することができます。
メッセージのパーティションが、消費者が消費者の順であるときカフカにのみ保証されます。実際には、ビューのトピックの観点から、複数のパーティションがある場合、メッセージは依然として世界的な順序です。
メッセージの並行処理の購買力のトピックを向上させることができますが、また、「フォールトトレラント」な性質を改善するだけでなくので、一般的に、消費者のグループは、より多く含まれています、コンシューマ・グループの故障であれば、
そして、消費者は、他の消費者が自動的にトピックを.kafka決定を引き継ぎ、同じグループは、個人消費のパーティションの数、同時により多くを持つことができないパーティションの設計原理を持つことになり、
それ以外の場合は、一部の消費者がメッセージを取得しないことを意味します。
プロデューサーバランシングアルゴリズム
どれブローカーカフカクラスタは、メタデータは、プロデューサに情報を提供することができ、「クラスタリスト内のサーバの生存」/「パーティションリーダーリスト」でこれらのメタデータ
そして、他の生産者の自信、そしてプロデューサーは、すべてのトピックパーティションのリーダーは、ソケット接続を保持しますときメタデータを取得し(ノード情報で飼育係を参照します);
直接ではなく、任意の中間「ルーティング層。」実際には、メッセージをパーティションにルーティングされたを通してブローカソケットにプロデューサによって送信されたメッセージは、クライアントがプロデューサを決定しました。
トピックが複数のパーティションに存在する場合、次いで、「バランスのとれたメッセージ配布」を達成するために、生産者側が必要であり、そのような「ランダム」「キーハッシュ」「ポーリング」として用いる等してもよいです。
プロファイルの生産者側では、開発者は、パーティションのルーティング方法を指定することができます。
消費者バランシングアルゴリズム
グループは、消費者がバランスのパーティションをトリガーする、参加するか、残しがある場合。バランスの取れた究極の目標は、話題の同時摂取の能力を強化することです。
1)topic1場合、次のパーティションを有する:P0、P1、P2、P3
C0、C1:2)、次の消費者グループを追加しました
3)インデックス番号をソートするパーティションの最初のパーティション:P0、P1、P2、P3
4)consumer.idソート:C0、C1
5)倍数を計算する:M = [P0、P1、P2、P3] .size / [C0、C1] .size、本実施形態の値M = 2(切り上げ)
6)次に、パーティションを割り振る:C0 = [P0、P1]を、C1 = [P2、P3]、すなわちCI = [P(iはMを*)、P((I + 1)* M -1)]
内側カフカブローカクラスタブローカとの間の複製機構
カフカにおいて、複製戦略はトピック代わりパーティション、に基づいて、パーティション・サーバーの複数のにカフカコピーデータ、パーティションの複数の任意のリーダーとフォロワー(できない)を有しています。
番号は読み書きブローカ構成ファイル、フォロワーとリーダーによってすべての要求は、「消費者」として.Followerを同期させる必要がある.leaderバックアッププロセスを設定することができ、
消費者情報とローカルログに保存されている;「後方」、すべてのフォロワー状態を追跡するための責任のリーダー、フォロワーであればあまりまたは失敗し、リーダーのレプリカは、同期リストから削除されます。
すべてのフォロワーが成功メッセージが保存されます場合は、このメッセージは唯一の「コミット」であると考えられた、そして消費者は、この時点でそれを消費することができ、この同期戦略は、フォロワーとリーダーの間の良好なネットワーク環境を持っている必要がありますが必要です。
生き残るためのレプリカのインスタンスが1つしかない場合でも、あなたはまだ限りのZooKeeperクラスタは生き残ることができるよう、通常の送信を保証し、メッセージを受け取ることができます(注:他の分散ストレージとは異なり、HBaseのは「大多数の」生存ジョブに必要など)。
カフカ機能モジュールの現在の理解によれば、学習を容易にし、使用するために、組成物は、以下のカフカモジュールに大別され、着信メッセージ処理モジュールに基づいて、順次導入続きます
参考ます。https://blog.csdn.net/lizhitao/article/details/23743821