写真と文章による詳細な説明: 私がカフカをこれほど愛する秘密は何でしょうか?

写真と文章による詳細な説明: 私がカフカをこれほど愛する秘密は何でしょうか?

[[357091]]

序文

さて、本題に入りましょう。今日皆さんにお話しするのは、私たちの古い友人であるカフカの死後の世界と現在の生活についてです。

リアルタイムパフォーマンスに対する要件がますます高まる中、膨大な量のデータを送信する際に、データの高速転送をどのように確保できるでしょうか?そのため、メッセージ キューが作成されました。

「メッセージ」とは、2 台のコンピュータ間で送信されるデータの単位です。メッセージは、単なるテキスト文字列のような非常に単純なものから、埋め込みオブジェクトを含むような複雑なものまであります。

メッセージはキューに送信されます。メッセージ キューは、送信中のメッセージを保存するコンテナーです。 Kafka は分散メッセージ キューであり、これを習得することは不可欠です。

この記事では、Kafka の基本コンポーネントと基本アプリケーションの実装の詳細について詳しく説明します。同時に、私はカフカの核となる知識を皆さんにもっと深く理解してもらえるよう、何晩も徹夜して図を描きました。最後に、実際のビジネスにおける Kafka の応用についてもまとめます。 Xiaoyu さんと一緒に、Kafka の小さな秘密を学びましょう。

Kafka の概念

Kafka は、LinkedIn によって最初に開発され、Scala で記述され、現在は Apache オープンソース プロジェクトとなっている、高スループットの分散型パブリッシュ/サブスクライブ ベースのメッセージング システムです。

Kafka の主要コンポーネント

  • ブローカー: メッセージの保存と転送を担当する Kafka サーバー
  • トピック: メッセージ カテゴリ。Kafka はトピックに従ってメッセージを分類します。

パーティション: トピック パーティション。トピックには複数のパーティションを含めることができます。トピック メッセージは各パーティションに保存されます。

オフセット: ログ内のメッセージの位置。パーティション上のメッセージのオフセットとして理解でき、またメッセージを表す一意のシリアル番号としても理解できます。

  • プロデューサー: メッセージプロデューサー
  • コンシューマー: メッセージコンシューマー
  • 消費者グループ: 消費者のグループ化。各消費者はグループに属している必要があります。
  • Zookeeper: クラスター ブローカー、トピック、パーティション、その他のメタデータを保存します。さらに、ブローカーの障害検出、パーティションリーダーの選出、負荷分散などの機能も担当します。

Kafka の利点

  • 分離: メッセージング システムは、暗黙的なデータベース インターフェイス レイヤーを処理プロセスに挿入し、処理プロセスの両側でこのインターフェイスを実装する必要があります。これにより、同じインターフェース制約に準拠している限り、両側での処理を個別に拡張または変更できます。
  • 冗長性: メッセージ キューは、データが完全に処理されるまでデータを保持するため、データ損失のリスクを回避できます。多くのメッセージ キューで採用されている「挿入、取得、削除」パラダイムでは、キューからメッセージを削除する前に、処理システムはメッセージが処理されたことを明確に示し、使用が完了するまでデータが安全に保存されるようにする必要があります。
  • スケーラビリティ: メッセージ キューは処理を分離するため、追加の処理を追加するだけで、メッセージのエンキューと処理の頻度を簡単に増やすことができます。コードの変更やパラメータの調整は必要ありません。スケーリングは電源ボタンを押すだけで簡単に行えます。
  • 柔軟性とピーク処理能力: メッセージ キューを使用すると、突然の過負荷要求によって主要コンポーネントが完全にクラッシュすることなく、突然のアクセス圧力に耐えることができます。
  • 回復可能性: メッセージ キューはプロセス間の結合を減らすため、メッセージを処理するプロセスがクラッシュした場合でも、キューに追加されたメッセージはシステムの回復後に引き続き処理できます。
  • 順序の保証: ほとんどのメッセージ キューは本質的にソートされており、データが特定の順序で処理されることを保証できます。 Kafka はパーティション内のメッセージの順序を保証します。
  • バッファリング: メッセージ キューはバッファリング レイヤーを使用して、タスクを最大限の効率で実行できるようにします。キューへの書き込みは可能な限り迅速に処理されます。このバッファは、システムがデータを通過する速度を制御および最適化するのに役立ちます。
  • 非同期通信: メッセージ キューは、ユーザーがメッセージをキューに入れてもすぐには処理しない、非同期処理メカニズムを提供します。必要な数のメッセージをキューに入れて、必要なときに処理することができます。

Kafka アプリケーション シナリオ

  • アクティビティ追跡: ウェブサイトのPV/UV分析など、ウェブサイトユーザーとフロントエンドアプリケーション間のインタラクションを追跡します。
  • メッセージ送信: マーケティング活動(登録後のクーポンコードや特典の送信)などのシステム間の非同期情報交換
  • ログ収集: アプリケーションの監視やアラートなどのシステムとアプリケーションのメトリックとログを収集します。
  • ログの送信: トランザクション統計などのデータベース更新を Kafka に公開します。

Kafka データストレージ設計

パーティションデータファイル

パーティション内の各メッセージには、オフセット、MessageSize、データの 3 つの属性が含まれます。オフセットは、このパーティション内のメッセージのオフセットを示します。オフセットは、パーティション データ ファイル内のメッセージの実際の保存場所ではなく、パーティション内のメッセージを一意に識別する論理値です。オフセットは、パーティション内のメッセージの ID と見なすことができます。 MessageSize はメッセージ コンテンツ データのサイズを示します。データはメッセージの具体的な内容です。

データファイルセグメントセグメント

パーティションは物理的に複数のセグメント ファイルで構成されます。各セグメントは同じサイズで、順番に読み書きされます。各セグメント データ ファイルの名前はセグメント内の最小オフセットにちなんで付けられ、ファイル拡張子は .log です。このように、指定されたオフセットを持つメッセージを検索する場合、バイナリ検索を使用して、メッセージが配置されているセグメント データ ファイルを見つけることができます。

データファイルインデックス

Kafka は、セグメント化されたデータ ファイルごとにインデックス ファイルを作成します。ファイル名はデータ ファイルと同じですが、ファイル拡張子は .index です。インデックス ファイルは、データ ファイル内の各メッセージのインデックスを作成しません。代わりに、スパース ストレージ方式を使用して、一定数のデータごとにインデックスを作成します。これにより、インデックス ファイルが多くのスペースを占有することがなくなり、インデックス ファイルをメモリ内に保持できるようになります。

Kafka における Zookeeper の役割

Kafka クラスター、プロデューサー、コンシューマーはいずれも、システムの可用性を確保し、クラスター内にメタ情報を保存するために Zookeeper に依存しています。

Kafka は、分散調整フレームワークとして Zookeeper を使用します。これは、メッセージの生成、メッセージの保存、メッセージの消費のプロセスを非常にうまく組み合わせたものです。

同時に、Zookeeper の助けを借りて、Kafka はプロデューサー、コンシューマー、ブローカーを含むすべてのコンポーネントに対してステートレスな方法でプロデューサーとコンシューマー間のサブスクリプション関係を確立し、プロデューサーとコンシューマー間の負荷分散を実現できます。

プロデューサーデザイン

負荷分散

メッセージ トピックは複数のパーティションで構成され、パーティションは異なるブローカーに均等に分散されるため、ブローカー クラスターのパフォーマンスを効果的に活用し、メッセージのスループットを向上させるために、プロデューサーはランダム メソッドまたはハッシュ メソッドを使用して複数のパーティションにメッセージを均等に送信し、負荷分散を実現できます。

一括送信

これは、メッセージのスループットを向上させる重要な方法です。プロデューサーはメモリ内の複数のメッセージをマージし、1 つのリクエストでブローカーにメッセージのバッチを送信できるため、ブローカーがメッセージを保存するための IO 操作の数が大幅に削減されます。ただし、これはメッセージのリアルタイム性にもある程度影響を及ぼし、これはレイテンシのコストと引き換えにスループットを向上させることに相当します。

圧縮

Kafka はバッチでのメッセージの送信をサポートしています。これに基づいて、Kafka はメッセージ バッチの圧縮もサポートします。プロデューサーは、メッセージ バッチを GZIP または Snappy 形式で圧縮できます。プロデューサー側で圧縮した後、コンシューマー側で解凍する必要があります。圧縮の利点は、送信されるデータの量が削減され、ネットワーク送信の負荷が軽減されることです。ビッグ データを処理する場合、ボトルネックは CPU ではなくネットワークに反映されることが多いです (圧縮と解凍によって CPU リソースが消費されます)。

では、メッセージが圧縮されているか圧縮されていないかをどのように区別するのでしょうか? Kafka はメッセージ ヘッダーに圧縮属性バイトを追加します。このバイトの最後の 2 桁は、メッセージ圧縮に使用されるエンコードを示します。最後の 2 桁が 0 の場合、メッセージは圧縮されていないことを意味します。

消費者向けデザイン

消費者団体

同じコンシューマー グループ内の複数のコンシューマー インスタンスは、同時に同じパーティションを消費しません。これはキュー モードと同等です。パーティション内のメッセージは順序付けられ、コンシューマーはプル方式でメッセージを消費します。 Kafka は、パーティションの使用済みメッセージを削除せず、ディスク データを順番に読み書きし、O(1) の時間計算量でメッセージの永続化機能を提供します。

実用化

メッセージングシステムとしての Kafka

トピック (パーティション) 内に並列処理の概念を持たせることで、Kafka はコンシューマー プロセスのプール全体にわたって順序の保証と負荷分散を提供できます。これは、トピック内のパーティションをコンシューマー グループ内のコンシューマーに割り当て、各パーティションがグループ内の 1 つのコンシューマーによってのみ消費されるようにすることで実現されます。こうすることで、コンシューマーがそのパーティションの唯一のリーダーとなり、データを順番に使用することが保証されます。パーティションが多数あるため、多くのコンシューマー インスタンス間で負荷を分散できます。ただし、コンシューマー グループ内のパーティション数よりも多くのコンシューマー インスタンスは存在できないことに注意してください。

ストレージシステムとしての Kafka

Kafka は非常に優れたストレージ システムです。 Kafka に書き込まれたデータはディスクに書き込まれ、フォールト トレランスのために複製されます。 Kafka では、プロデューサーが確認応答を待機できるため、書き込みは完全に複製されるまで完了とは見なされず、書き込み先のサーバーに障害が発生しても書き込みが存続することが保証されます。

Kafka のディスク上の構造はスケールを非常にうまく利用しており、サーバー上に 50 KB の永続データがあっても 50 TB の永続データがあっても、Kafka は同じように動作します。

Kafka はストレージを重視し、クライアントが読み取り位置を制御できるようにするため、高パフォーマンスで低レイテンシのコミット ログのストレージ、レプリケーション、および伝播用に設計された特殊な分散ファイル システムと考えることができます。

ストリーム処理のための Kafka

複雑な変換のために、Kafka は完全に統合された Streams API を提供します。これにより、ストリームの集計を計算したり、ストリームを結合したりするなど、重要な処理を実行するアプリケーションを構築できます。

このツールは、順序どおりでないデータの処理、コード変更時の入力の再処理、ステートフルな計算の実行など、このようなアプリケーションが直面する課題に対処するのに役立ちます。

Streams API は、Kafka によって提供されるコア原則に基づいて構築されています。つまり、入力にはプロデューサー API とコンシューマー API を使用し、ステートフル ストレージには Kafka を使用し、フォールト トレランス* にはストリーム プロセッサ インスタンス間で同じグループ メカニズムを使用します。

<<:  ガートナーは強力なエンタープライズクラウド戦略を構築するための7つのステップを概説

>>:  インサイト: VUCA時代のデジタル人材管理を考える

推薦する

中国におけるウェブサイト構築の発展にはどの程度の勢いがあるのでしょうか?

近年、経済の継続的な発展に伴い、中国のネットワーク構築市場は急速に発展し、成長してきました。データ分...

ウェブサイトのデザインでは慎重に作成する必要があるいくつかの詳細

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

SEO の目的はお金を稼ぐことでしょうか、それともブランドをパッケージ化することでしょうか?

SEO は現在最もホットな業界ですが、最も退屈で難しい仕事でもあります。では、なぜこれほど多くの人が...

実際のトラフィックはウェブサイトの詳細構築から生まれます

今日では、ターゲット顧客が製品を購入する際、オンラインで関連情報を確認します。主な目的は明らかで、関...

4月の世界ウェブサーバー市場シェア:マイクロソフトが33.04%に増加し、Apacheに迫る

IDC Review Network (idcps.com) は 4 月 17 日に次のように報告し...

突然の停止が発生した場合、Kafka によって書き込まれたデータが失われないようにするにはどうすればよいですか?

先週、「Kafka はどのようにして 1 秒あたり数百万件という超高速同時書き込みを実現するのか?」...

SEO 業界は Baidu の手動介入を規制できるでしょうか?

Baidu の最新の SEO 規制により、この記事を書くことで多くの注目を集める可能性があり、著者は...

「豚狂人」劉青亜事件のマーケティング分析:小さな努力で大きな成果を達成できる

2012年4月18日、網易ニュースは「メディアは、クレンブテロールの広範な使用がスポーツチームに『肉...

インバウンドマーケティングで有料顧客を獲得する方法

時には、投稿コメントやブログのリカバリなどを行ったり、ソーシャルメディアやコミュニティで何千もの同様...

企業がツールを活用してクラウドコストを管理する方法

パブリック クラウドのオンデマンド価格モデルは、クラウド コンピューティングの主な利点であるアプリケ...

中小製造業者は、クラウド コンピューティングの 6 つの主要なコストをどのようにして克服できるでしょうか?

[[205152]]中国におけるクラウドコンピューティングは急速に発展している産業です。業界のプレイ...

電子商取引サイトのプロモーションモデルを共有する

電子商取引サイトは、その運営形態によって、大きく分けて、上場準備を進めており、多額の資本注入を受ける...

クラウド プラットフォームの可視性を向上させる必要があるのはなぜですか?

COVID-19パンデミックは多くの企業の業務に大きな変化をもたらしました。多くの企業は、顧客の期待...

すべての IT リーダーが答えなければならないクラウド戦略に関する 9 つの質問

今の問題は、企業がクラウドに移行しているかどうかではなく、それがどれだけうまく進んでいるかということ...