序文 さて、本題に入りましょう。今日皆さんにお話しするのは、私たちの古い友人であるカフカの死後の世界と現在の生活についてです。 リアルタイムパフォーマンスに対する要件がますます高まる中、膨大な量のデータを送信する際に、データの高速転送をどのように確保できるでしょうか?そのため、メッセージ キューが作成されました。 「メッセージ」とは、2 台のコンピュータ間で送信されるデータの単位です。メッセージは、単なるテキスト文字列のような非常に単純なものから、埋め込みオブジェクトを含むような複雑なものまであります。 メッセージはキューに送信されます。メッセージ キューは、送信中のメッセージを保存するコンテナーです。 Kafka は分散メッセージ キューであり、これを習得することは不可欠です。 この記事では、Kafka の基本コンポーネントと基本アプリケーションの実装の詳細について詳しく説明します。同時に、私はカフカの核となる知識を皆さんにもっと深く理解してもらえるよう、何晩も徹夜して図を描きました。最後に、実際のビジネスにおける Kafka の応用についてもまとめます。 Xiaoyu さんと一緒に、Kafka の小さな秘密を学びましょう。 Kafka の概念 Kafka は、LinkedIn によって最初に開発され、Scala で記述され、現在は Apache オープンソース プロジェクトとなっている、高スループットの分散型パブリッシュ/サブスクライブ ベースのメッセージング システムです。 Kafka の主要コンポーネント
パーティション: トピック パーティション。トピックには複数のパーティションを含めることができます。トピック メッセージは各パーティションに保存されます。 オフセット: ログ内のメッセージの位置。パーティション上のメッセージのオフセットとして理解でき、またメッセージを表す一意のシリアル番号としても理解できます。
Kafka の利点
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時代のデジタル人材管理を考える
ソーシャルプラットフォームと情報フロープラットフォームの統合により、周囲のトラフィックを絶えず吸収す...
Bilibiliはずっとエコシステムをベースにしたプラットフォームを構築してきました。業界で一定の地...
2019年5月23日、上海—世界のロボティック・プロセス・オートメーション(RPA)業界をリードする...
[[354367]]この記事はWeChatの公開アカウント「Programmer's Ins...
企業は、パブリック クラウドを採用するか、プライベート クラウドを採用するかという選択に直面すること...
asmallorange は 2004 年に設立されたアメリカのホスティング会社です。同社の事業には...
今から 26 日まで、Hawkhost は最後の春のプロモーションを実施しています: (1) クラウ...
企業がクラウド移行のペースを加速するにつれ、コンテナ、マイクロサービス、動的オーケストレーションに代...
Hostmist は以前、主要なフォーラム、特にホスティングに関する海外のブログやフォーラムでよく見...
サイト全体の最適化プロジェクトを運用する場合、デッドリンクツールを使用して、Web サイト上のデッド...
Hostiso は、2000 年から運営されているアメリカのホスティング会社です。同社の事業は、ドメ...
著者は数年にわたり SEO に携わっており、主に SEO に関する記事、ビデオ、トレーニングから S...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています対外貿易ウ...
今日、グループの誰かが私に、企業ウェブサイトの SEO をどのように行うかを尋ねました。企業ウェブサ...
優れたブログは、企業にとって独立した販売チャネルとなり、顧客関係を維持するためのプラットフォームとな...