「MQ シリーズをマスターする」 - カフカの謎を解き明かす

「MQ シリーズをマスターする」 - カフカの謎を解き明かす

[[390063]]

みなさんこんにちは。私はウー兄弟です。これは「MQ マスタリー シリーズ」の第 2 弾です。少し遅くなりましたが、何人かの読者から更新を促されました。本当にごめんなさい!

この記事は数週間遅れています。私の最初のアイデアは、それぞれの特定のメッセージ ミドルウェアについて徹底的に記述するだけでなく、長さも制御することでした。しかし、書き出してみたら難しすぎて、両方を同時に持つのは難しいと分かりました。

最終的に、複数回に分けて書くことにしました。一方では、出力周波数を高速化することができます。その一方で、誰にとっても理解しやすいものとなっています。

さっそく、第二波が始まります。

01 なぜ Kafka から始めるのですか?

「Mastering MQ」の冒頭では、MQ の本質である「1 つの送信、1 つの保存、1 つの消費」を中心に、MQ の一般的な知識を説明し、体系的に「MQ の設計をどのように開始するか」に答えます。

この記事から、具体的なメッセージミドルウェアについて説明していきます。私が Kafka から始めることにした理由は 3 つあります。

まず、RocketMQ と Kafka は現在最も人気のある 2 つのメッセージ ミドルウェアであり、インターネット企業で最も広く使用されています。彼らがこのシリーズの焦点となります。

第二に、MQの開発の歴史から見ると、KafkaはRocketMQより前に誕生しており、AlibabaチームはRocketMQを実装する際にKafkaの設計思想を全面的に借用しました。 Kafka の設計原則を習得すると、後で RocketMQ を理解するのがはるかに簡単になります。

3 番目に、Kafka は実際には軽量の MQ です。 MQ の最も基本的な機能を備えていますが、遅延キューや再試行メカニズムなどの高度な機能はサポートしていないため、実装の複雑さが軽減されます。 Kafka から始めると、誰もが MQ の中核をすぐに理解できるようになります。

背景を説明した上で、私の考えに沿ってカフカを浅くから深く分析してみてください。

02 カフカの公開

テクノロジーを詳細に分析する前に、アーキテクチャや技術的な詳細をすぐに理解するのではなく、まずそれが何であるかを把握することが推奨されます。それはどのような問題を解決するために作られたのでしょうか?

この背景知識を習得すると、デザインの考慮事項とその背後にあるアイデアを理解するのに役立ちます。

この記事を書くにあたり、多くの情報を参考にしました。カフカの定義は多様であると言えます。よく考えないと混乱してしまいます。全員にそれを経験させる必要があると思います。

まず、Kafka の公式 Web サイトで提供されている定義を見てみましょう。

  • Apache Kafka はオープンソースの分散イベント ストリーミング プラットフォームです。

中国語に翻訳: Apache Kafka はオープンソースの分散ストリーム処理プラットフォームです。

Kafka はメッセージングシステムではないのですか?なぜ分散ストリーム処理プラットフォームと呼ばれるのでしょうか?これら2つは同じものですか?

読者の中には、このような疑問を持つ人もいるかもしれません。この疑問を説明するには、まずカフカの誕生の背景から始める必要があります。

Kafka はもともと Linkedin 内で育成されたプロジェクトでした。これは、次の 2 つのシナリオを処理するための「データ パイプライン」として設計されました。

  • 1. 運用アクティビティ シナリオ: ユーザーの閲覧、検索、クリック、アクティビティ、その他の動作を記録します。
  • 2. システム運用および保守シナリオ: サーバーの CPU、メモリ、要求期間、その他のパフォーマンス指標を監視します。

どちらのタイプのデータもログのカテゴリに属し、データがリアルタイムで生成され、データ量が大きいという特徴があることがわかります。

Linkedin は当初、データ転送の問題を解決するために ActiveMQ を使用しようとしましたが、パフォーマンスが要件を満たさなかったため、独自に Kafka を開発することにしました。

そのため、Kafka は最初からリアルタイムのログ ストリーミングのために誕生しました。このような背景を知れば、Kafka とストリーミング データの関係、そしてなぜ Kafka がビッグ データの分野で広く使用されているのかを理解するのは難しくありません。これは、もともとビッグデータのパイプライン問題を解決するために作成されたためです。

説明させてください: Kafka がストリーム処理プラットフォームとして正式に定義されているのはなぜでしょうか?データ チャネル機能を提供するだけではないでしょうか?プラットフォームとどのように関係しているのでしょうか?

これは、Kafka がバージョン 0.8 以降、次のようなデータ処理に関連するコンポーネントを提供しているためです。

  • 1. Kafka Streams: Spark や Flink に似た軽量のストリーム コンピューティング ライブラリ。
  • 2. Kafka Connect: Kafka からリレーショナル データベース、Hadoop、検索エンジンにデータをインポートできるデータ同期ツール。

Kafka の野望は単なるメッセージング システムではないことがわかります。長年にわたり「リアルタイム ストリーム処理プラットフォーム」に向けて開発が進められてきました。

この時点で、Kafka の公式 Web サイトに記載されている 3 つの機能を理解するのは難しくありません。

  • 1. データの公開およびサブスクリプション機能(メッセージ キュー)
  • 2. 分散データストレージ機能(ストレージシステム)
  • 3. リアルタイムデータ処理機能(ストリーム処理エンジン)

このように、Kafka の開発履歴と定義は基本的に明確です。もちろん、このシリーズでは Kafka の最初の 2 つの機能にのみ焦点を当てています。どちらの機能も MQ と密接に関連しているためです。

03 Kafkaのメッセージモデルから始める

Kafka の位置付けと背景がわかったところで、Kafka の設計哲学を分析してみましょう。

前回の記事では、MQ を完全に理解するには、技術的な詳細に直接進むことは言うまでもなく、すぐに技術的なアーキテクチャを見るのではなく、「メッセージ モデル」などの最もコアとなる理論レベルから始めることを推奨すると述べました。

いわゆるメッセージ モデルは、論理構造として理解できます。これは技術アーキテクチャの上にある抽象レイヤーであり、多くの場合、中核となる設計アイデアを意味します。

次に、Kafka のメッセージ モデルを分析して、それがどのように進化してきたかを見てみましょう。

まず、メッセージ データを複数のコンシューマーに配布し、各コンシューマーがメッセージの全量を受信できるようにするには、ブロードキャストを考えるのが自然です。

ここで問題が発生します。メッセージが届くと、すべての消費者にブロードキャストされますが、すべての消費者がすべてのメッセージを望んでいるわけではありません。たとえば、コンシューマー A はメッセージ 1、2、3 のみを希望し、コンシューマー B はメッセージ 4、5、6 のみを希望しているとします。この場合、どうすればよいでしょうか。

この問題の重要な点は、MQ がメッセージのセマンティクスを理解しておらず、メッセージを分類して配信することができないことです。

この時点で、MQ は非常に巧妙な解決策を思いつきました。つまり、問題を直接プロデューサーに投げかけ、プロデューサーがメッセージを送信するときにメッセージを論理的に分類することを要求し、私たちがよく知っているトピックとパブリッシュ サブスクライブ モデルに進化したのです。

この方法では、消費者は興味のあるトピックをサブスクライブし、そのトピックからメッセージを取得するだけで済みます。

しかし、これを実行した後でも、まだ問題が残ります。複数の消費者が同じトピックに関心を持っている場合 (下の図の消費者 C など)、どのように解決すればよいのでしょうか。

従来のキュー モード (ユニキャスト) を使用すると、コンシューマーがキューからメッセージを取得すると、そのメッセージは削除され、別のコンシューマーはそれを取得できなくなります。

このとき、次のような解決策を考えるのが自然です。

つまり、トピックに新しいコンシューマーが追加されるたびに、同一のデータ キューが「コピー」されます。

これにより問題は解決されますが、下流の消費者の数が増えると、MQ のパフォーマンスは急速に低下します。特に、最初からビッグデータ シナリオを処理するように設計された Kafka の場合、このレプリケーション操作は明らかにコストがかかりすぎます。

現時点では、Kafka が最も簡潔なソリューションを提供しています。Kafka はすべてのメッセージを永続的に保存し、コンシューマーはメッセージのオフセットを渡すだけで、いつでも必要なもの、つまり任意のメッセージを取得できます。

このような根本的な変更により、複雑な消費の問題が完全に消費者に戻され、Kafka 自体の複雑さが大幅に軽減され、高いパフォーマンスと高いスケーラビリティの優れた基盤が築かれます。 (これが Kafka と ActiveMQ と RabbitMQ の根本的な違いです)

最後に、簡略化すると次の図のようになります。

これは Kafka のオリジナルのメッセージ モデルです。

これは、第 2 章で、当局が Kakfa を同時にストレージ システムとして定義する理由についても間接的に説明しています。

もちろん、Kafka の洗練されたデザインはこれをはるかに超えています。スペースの制約により、次の記事で引き続き分析します。

04 結論

この記事は、カフカ誕生の背景から始まり、カフカの定義とカフカが解決しようとしている問題を明確にするのに役立ちます。

さらに、Kafka の最上位レベルの抽象化である、Kafka のメッセージ モデルと設計アイデアが段階的に分析されます。

この記事はWeChatの公開アカウント「Wu Ge Talks IT」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Wu Ge の IT パブリック アカウントにご連絡ください。

<<:  Linux 仮想化 KVM-Qemu Virtqueue の分析

>>:  国内のSaaSエンタープライズサービスはなぜ普及しないのか?

推薦する

arkecxc マレーシア クラウド サーバー レビュー: クアラルンプール データ センター、1Gbps の大容量帯域幅

arkecxcはどうですか? arkecxのマレーシアクラウドサーバーを使って簡単な評価をしてみまし...

グリーンクラウドコンピューティングが未来の夢を推進

「グリーン クラウド コンピューティング」は、コンピューティングやその他の IT リソースの持続可能...

stablebox-Win/$6.95/768m メモリ/30g ハードドライブ/2T トラフィック/G ポート

stableboxがホストモ​​デムに登場したのは今回で2回目です。2月17日に「stablebox...

広告のコンバージョン率を向上させるための中核要素:テーマ、効果、場所

現在、ほとんどのウェブサイトの主な収入源は広告です。しかし、多くのウェブマスターは、広告収入が低いこ...

WeChatのユーザー数は3億人を突破。SEO担当者はまだ冷静でいられるだろうか?

1. WeChatとは何ですか? WeChat は、2012 年 1 月 21 日に Tencent...

有能な SEO 担当者になるにはどのような能力が必要ですか?

SEO ウェブサイト最適化業界で働きたい人はたくさんいますが、あなたは有能な SEO ウェブサイト最...

SEO対策の前にウェブサイト自体を改善して受注力を高める方法

Baidu アルゴリズムの継続的な改善により、SEO の需要に加わるウェブサイトがますます増え、SE...

リソース共有ウェブサイトに未来はない

知的財産権を守ることと知的財産権を侵害することは相反する存在であり、知的財産権が侵害されるからこそ、...

ウェブサイトの内部リンク構築のデメリットを個人的に体験

2005年にインターネットに触れてから6、7年が経ちました。最初はチャットをしたり、音楽を聴いたり、...

初心者のためのクラウドコンピューティング完全ガイド

このクラウド コンピューティング ガイドでは、クラウド コンピューティングの歴史、機能、利点、欠点、...

データレポート | 2019年ソーシャルトレンド分析レポート!

サブセクターが成長ポイント: 2019年2月、ソーシャルネットワーク業界のユーザー規模は9億7,30...

一般的な対外貿易促進方法の一覧

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています対外貿易促...