序文「私は、パンデミック中にゲームをプレイしながら Kafka を学びました。ActiveMQ や RabbitMQ を使用したことはありますが、Kafka 技術に関しては初心者でもあります。記事に不完全な点や不正確な点がありましたら、ご指摘ください。」今日は、主に Kafka を再理解し、Kafka のより重要な概念と問題について話すために、Kafka についてお話します。次の記事で紹介します:
Kafka についてよく言及する場合、それは優れたメッセージ キューであると想定されます。 RocketMQ や RabbitMQ と比較されることもよくあります。他のメッセージ キューと比較した Kafka の主な利点は次のとおりだと思います。
実際、初期の頃、Kafka は適切なメッセージ キューではありませんでした。メッセージ キューの分野では、初期の Kafka は機能が不完全で、メッセージの損失やメッセージの信頼性の保証の失敗などのいくつかの小さな問題を抱えた、ぼろぼろの子供のようでした。もちろん、これは LinkedIn が最初に大量のログを処理するために Kafka を開発したという事実とも密接に関係しています。ハハハハ、もともとメッセージ キューとして意図されていたわけではありませんが、誤ってメッセージ キュー フィールドの場所を占有することになるとは誰が想像したでしょうか。 その後の開発で、これらの欠点は Kafka によって徐々に修正され、改善されました。したがって、**、Kafka はメッセージ キューとして信頼できないという主張は時代遅れです!** Kafkaを使い始める まずは最も権威があり、リアルタイムであるはずの公式サイトの紹介を見てみましょう。英語であっても問題ありません。より重要な情報を抜粋しました。 公式紹介から、次の情報を得ることができます。 Kafka は分散ストリーム処理プラットフォームです。これはどういう意味ですか? ストリーミング プラットフォームには、次の 3 つの主要な機能があります。
Kafka には主に 2 つのアプリケーション シナリオがあります。
Kafka に関するいくつかの非常に重要な概念:
Kafka メッセージ モデル 「余談ですが、初期の JMS と AMQP は、メッセージ サービスの分野で権威ある組織によって開発された標準でした。JavaGuide の記事「メッセージ キューは実際には非常にシンプル」で紹介しました。ただし、これらの標準の進化はメッセージ キューの進化に追いつくことができず、これらの標準は実際には放棄された状態になっています。そのため、異なるメッセージ キューには独自のメッセージ モデルが存在する可能性があります。 「キューモデル: 初期のメッセージモデル プロデューサーとコンシューマーのモデルを満たすために、キューをメッセージ通信キャリアとして使用します。メッセージは 1 つのコンシューマーのみが使用でき、消費されなかったメッセージは消費されるかタイムアウトになるまでキューに保持されます。たとえば、プロデューサーが 100 件のメッセージを送信し、2 人のコンシューマーが消費する場合、通常、2 人のコンシューマーは、メッセージが送信された順序でメッセージの半分を消費します (つまり、あなたが 1 つ消費し、私が 1 つ消費します)。 キューモデルの問題 プロデューサーによって生成されたメッセージを複数のコンシューマーに配布する必要があり、各コンシューマーが完成したメッセージ コンテンツを受信できる状況があるとします。 この場合、キュー モデルを解くのは困難です。議論好きな人の多くは、次のように言います。「消費者ごとに個別のキューを作成し、プロデューサーが複数のコピーを送信できるようにすることができます。」これは非常に愚かな習慣です。リソースを浪費するだけでなく、メッセージ キューを使用する目的も失われます。 パブリッシュ・サブスクライブモデル: Kafka メッセージモデル パブリッシュ/サブスクライブ モデルは、主にキュー モデルに存在する問題を解決するために設計されています。 パブリッシュ サブスクライブ モデル (Pub-Sub) は、トピックをメッセージ通信キャリアとして使用します。これはブロードキャスト モデルに似ています。パブリッシャーはメッセージをパブリッシュし、そのメッセージはトピックを通じてすべてのサブスクライバーに配信されます。メッセージがブロードキャストされた後にサブスクライブしたユーザーは、メッセージを受信しません。 パブリッシュ サブスクライブ モデルでは、サブスクライバーが 1 つだけの場合は、基本的にキュー モデルと同じです。したがって、パブリッシュ/サブスクライブ モデルは機能レベルでキュー モデルと互換性があります。 Kafka はパブリッシュ/サブスクライブ モデルを使用します。次の図に示すように: 「RocketMQ のメッセージ モデルは基本的に Kafka と同じです。唯一の違いは、RocketMQ にはキューの概念がなく、パーティションの概念があることです。 「カフカの重要な概念の解釈 Kafka はプロデューサーによって公開されたメッセージをトピックに送信し、これらのメッセージを必要とするコンシューマーは、次の図に示すように、これらのトピックをサブスクライブできます。 Kafka トピックパーティション 上の図では、Kafka のいくつかの重要な概念も紹介されています。
同時に、各ブローカーにはトピックとパーティションという 2 つの重要な概念が含まれていることに気づいたはずです。
「重要な点: Kafka のパーティションは、実際にはメッセージ キューのキューに対応します。これは理解しやすいでしょうか?」 さらに、より重要だと思うもう 1 つの点は、Kafka がパーティション (Partion) のマルチコピー (Replica) メカニズムを導入していることです。パーティション内の複数のレプリカの中には、リーダーと呼ばれるものがあり、その他のレプリカはフォロワーと呼ばれます。送信したメッセージはリーダー コピーに送信され、フォロワー コピーは同期のためにリーダー コピーからメッセージをプルできます。 「プロデューサーとコンシューマーは、リーダー レプリカとのみ対話します。他のレプリカはリーダー レプリカのコピーと考えることができます。これらは、メッセージ ストレージのセキュリティを確保するためだけに存在します。リーダー レプリカに障害が発生すると、フォロワーからリーダーが選出されますが、いずれかのフォロワーがリーダーとの同期要件を満たさない場合、リーダー選出に参加できません。 Kafka のマルチパーティションおよびマルチレプリカ メカニズムの利点は何ですか?
Kafka における Zookeeper の役割 「Kafka における Zookeeper の役割を理解したい場合は、自分で Kafka 環境を構築し、Zookeeper にアクセスして、どのフォルダーが Kafka に関連し、各ノードにどのような情報が保存されているかを確認する必要があります。練習せずに読むだけではいけません。そうしないと、学んだことを結局忘れてしまいます。」 以下の記事では、Kafka 環境の構築方法を紹介します。心配しないでください。以降の記事を読めば、3 分で Kafka 環境を構築できます。 「この部分のコンテンツは、こちらの記事を参照し、参考にしています:https://www.jianshu.com/p/a036405f989c 。」 下の画像は、ローカルの Zookeeper です。これは、ローカルの Kafka に正常に関連付けられています (次のフォルダー構造は、アイデア プラグインの Zookeeper ツールを使用して実装されています)。 ZooKeeper は主に Kafka のメタデータ管理機能を提供します。 図から、Zookeeper は主に Kafka に対して次のことを実行していることがわかります。
Kafka はどのようにしてメッセージの消費順序を保証するのでしょうか? メッセージ キューを使用する場合、メッセージの消費順序を厳密に保証する必要があるビジネス シナリオがよくあります。たとえば、2 つのメッセージを同時に送信します。これら 2 つのメッセージに対応する操作は、ユーザーのメンバーシップ レベルの変更と、メンバーシップ レベルに基づいた注文価格の計算です。これら 2 つのメッセージの消費順序が異なる場合、最終結果は完全に異なります。 Kafka のパーティションはメッセージが実際に保存される場所であり、送信するすべてのメッセージはここに配置されることがわかっています。パーティションはトピックの概念の中に存在し、特定のトピックに対して複数のパーティションを指定できます。 Kafka トピック パーティション レイアウト メッセージがパーティションに追加されるたびに、上図に示すように、末尾追加方式が使用されます。 Kafka はパーティション内のメッセージの順序のみを保証できますが、トピック内のパーティションの順序は保証できません。 「メッセージがパーティションに追加されると、特定のオフセットが割り当てられます。Kafka はオフセットを使用して、パーティション内のメッセージの順序を確保します。」 したがって、メッセージの消費順序を保証する非常に簡単な方法があります。1 つのトピックは 1 つのパーティションにのみ対応します。確かにこれで問題は解決できますが、Kafka の本来の設計意図は損なわれます。 Kafka でメッセージを送信するときに、トピック、パーティション、キー、データの 4 つのパラメータを指定できます。メッセージを送信するときにパーティションを指定すると、すべてのメッセージが指定されたパーティションに送信されます。さらに、同じキーを持つメッセージは同じパーティションにのみ送信されることが保証されます。テーブル/オブジェクト ID をキーとして使用できます。 要約すると、Kafka でメッセージの消費順序を確保する方法は 2 つあります。
もちろん、上記の 2 つの方法以外にも方法はあります。上記2つの方法の方が分かりやすいと思います。 |
<<: クラウドコンピューティングの割引でインスタンスコストを節約する方法
>>: HDFS、Ceph、GFS、GPFS、Swift、Lustre... コンテナ クラウドに適した分散ストレージはどれでしょうか?
ウェブサイトの起源私は会社員で、現在30歳です。2012年以前は、いつもオンラインゲームをするのが好...
最近グループが非常に活発になっており、この時期の投稿は全員百度の影響を受けているようです。この現象を...
[[422790]]この記事はWeChatの公開アカウント「Mingge's IT Essa...
来年に向けて、コストパフォーマンスに優れた海外VPSを厳選しました。 安価なVPSをレンタルする顧客...
VPS (仮想プライベート サーバー) への移行には、通常、次の手順が含まれます。適切な VPS プ...
ユーザー ジャーニーとは、最初のコンタクトから支払いの完了、製品やサービスの享受に至るまで、ユーザー...
検索エンジンのランキングはウェブマスターにとって致命的であり、特にSEO仲間にとってはご飯茶碗に等し...
少し前に、ウェブマスターフォーラムで、ウェブマスターがどのようにウェブサイトを運営し、コアユーザーを...
今日は、誰もが毎日関わっているかもしれない大きなビジネス、食品と飲料の新しい全国的なトレンドについて...
ramnode に関して、ここで少し説明します。シアトル データ センターは DDoS 保護をサポー...
2002 年当時、Apple の iMac G4 は市場で最も軽量、最薄、そして最も洗練されたコンピ...
fatcow は 4 月下旬に素晴らしいプロモーションを開始しました:無制限の Web サイト ホス...
ウェブサイトのキーワード選択は、ウェブサイトにとって最優先事項となっています。ウェブサイトのキーワー...
Zenlayerはインドネシア/インドネシアに自社インドネシアデータセンターを構え、データセンターは...
クラウド コンピューティングが何であるかは、詳しく説明しなくても誰もが知っています。ほとんどの人があ...