序文 さて、本題に入りましょう。今日皆さんにお話しするのは、私たちの古い友人であるカフカの死後の世界と現在の生活についてです。 リアルタイムパフォーマンスに対する要件がますます高まる中、膨大な量のデータを送信する際に、データの高速転送をどのように確保できるでしょうか?そのため、メッセージ キューが作成されました。 「メッセージ」とは、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時代のデジタル人材管理を考える
近年、経済の継続的な発展に伴い、中国のネットワーク構築市場は急速に発展し、成長してきました。データ分...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...
SEO は現在最もホットな業界ですが、最も退屈で難しい仕事でもあります。では、なぜこれほど多くの人が...
今日では、ターゲット顧客が製品を購入する際、オンラインで関連情報を確認します。主な目的は明らかで、関...
IDC Review Network (idcps.com) は 4 月 17 日に次のように報告し...
先週、「Kafka はどのようにして 1 秒あたり数百万件という超高速同時書き込みを実現するのか?」...
Baidu の最新の SEO 規制により、この記事を書くことで多くの注目を集める可能性があり、著者は...
2012年4月18日、網易ニュースは「メディアは、クレンブテロールの広範な使用がスポーツチームに『肉...
時には、投稿コメントやブログのリカバリなどを行ったり、ソーシャルメディアやコミュニティで何千もの同様...
パブリック クラウドのオンデマンド価格モデルは、クラウド コンピューティングの主な利点であるアプリケ...
「BanwagonHost: 新しい 10Gbps 帯域幅 cn2 gia ライン VPS、Chin...
[[205152]]中国におけるクラウドコンピューティングは急速に発展している産業です。業界のプレイ...
電子商取引サイトは、その運営形態によって、大きく分けて、上場準備を進めており、多額の資本注入を受ける...
COVID-19パンデミックは多くの企業の業務に大きな変化をもたらしました。多くの企業は、顧客の期待...
今の問題は、企業がクラウドに移行しているかどうかではなく、それがどれだけうまく進んでいるかということ...