Kafkaを理解するKafka の紹介Kafka は分散ストリーミング プラットフォームです。 Kafka 公式サイト: http://kafka.apache.org/ 1) ストリーミング プラットフォームには、次の 3 つの主要な機能があります。
2) Kafka は通常、次の 2 つのカテゴリのアプリケーションで使用されます。
3) まず、いくつかの概念:
4) Kafka には 4 つのコア API があります。
写真 Kafka では、クライアントとサーバー間の通信は、シンプルで高性能、言語に依存しない TCP プロトコルを介して行われます。このプロトコルはバージョン管理されており、古いバージョンとの下位互換性が維持されています。 Kafka は Java クライアントを提供しますが、クライアントは多くの言語で利用できます。 1.2 トピックとパーティションまず、Kafka がレコードのストリームに対して提供するコア抽象化であるトピックを詳しく見ていきます。 トピックはメッセージの一種と考えることができます。各トピックは複数のパーティションに分割されます。各パーティションは、ストレージ レベルでの追加ログ ファイルです。 トピックは、レコードが公開されるカテゴリまたはフィード名です。 Kafka トピックは常にマルチサブスクライバーです。つまり、トピックには、書き込まれたデータをサブスクライブする 0 個、1 個、または多数のコンシューマーが存在する可能性があります。 各トピックについて、Kafka クラスターは次のようなパーティション化されたログを維持します。 写真 各パーティションは、構造化されたコミット ログに継続的に追加される、順序付けられた不変のレコードのシーケンスです。パーティション内の各レコードには、オフセットと呼ばれる連続した ID 番号が割り当てられ、パーティション内の各レコードを一意に識別します。 Kafka クラスターは、消費されたかどうかに関係なく、設定可能な保持期間を使用して、公開されたすべてのレコードを保持します。たとえば、保持ポリシーが 2 日に設定されている場合、レコードは公開後 2 日間使用可能になり、その後はスペースを解放するために破棄されます。 Kafka のパフォーマンスはデータ サイズに関して実質的に一定であるため、長期間にわたってデータを保存しても問題はありません。 写真 実際、コンシューマーごとに保持されるメタデータは、そのコンシューマーのオフセットまたはログ内の位置のみです。このオフセットはコンシューマーによって制御されます。通常、コンシューマーはレコードを読み取るときにオフセットを直線的に進めますが、実際には、位置はコンシューマーによって制御されるため、任意の順序でレコードを消費できます。たとえば、コンシューマーは古いオフセットにリセットして過去のデータを再処理したり、最新のレコードにジャンプして「今」から消費を開始したりできます。 この機能の組み合わせにより、Kafka コンシューマーは非常に安価になり、クラスターや他のコンシューマーに大きな影響を与えることなく、出入りできるようになります。たとえば、コマンドライン ツールを使用して、既存のコンシューマーが消費する内容を変更せずに、任意のトピックのコンテンツを「テール」することができます。 ログ内のパーティションにはいくつかの目的があります。まず、ログを単一のサーバーに収まるサイズを超えて拡張できるようになります。個々のパーティションは、それをホストするサーバーに収まる必要がありますが、トピックには任意の量のデータを処理できるように、複数のパーティションが存在する場合があります。 2 番目に、それらは並列処理の単位として機能します。これについては後で詳しく説明します。 1.3 配布トピックの複数のパーティションは、Kafka クラスター内の複数のサーバーに分散されます。各サーバー (Kafka インスタンス) は、パーティション内のメッセージの読み取りと書き込みを担当します。さらに、Kafka ではバックアップするパーティション (レプリカ) の数も設定でき、各パーティションは複数のマシンにバックアップされるため、可用性が向上します。 複製されたソリューションに基づくと、複数のバックアップをスケジュールする必要があることを意味します。各パーティションには「リーダー」となるサーバーが存在します。リーダーはすべての読み取りおよび書き込み操作を担当します。リーダーが失敗した場合、他のフォロワーが引き継ぎます(新しいリーダーになります)。フォロワーはリーダーに単調に従い、メッセージを同期するだけです...リーダーとしてのサーバーがすべての要求圧力を負担していることがわかります。したがって、クラスター全体を考慮すると、パーティションの数は「リーダー」の数を意味します。 Kafka は、全体的な安定したパフォーマンスを確保するために、各インスタンスに「リーダー」を均等に分散します。 1.4 生産者と消費者1.4.1 プロデューサー プロデューサーは指定されたトピックにデータを公開します。同時に、プロデューサーはメッセージがどのパーティションに属するかを決定することもできます。たとえば、「ラウンドロビン」方式やその他のアルゴリズムに基づいて行われます。 1.4.2 消費者
写真 分析: 2 つのサーバー Kafka クラスター。4 つのパーティション (P0 ~ P3) をホストし、2 つのコンシューマー グループが含まれています。コンシューマー グループ A には 2 つのコンシューマー インスタンスがあり、グループ B には 4 つのコンシューマー インスタンスがあります。 Kafka で消費が実装される方法は、ログ内のパーティションをコンシューマー インスタンス間で分割し、各インスタンスが任意の時点で割り当ての「公平なシェア」の排他的コンシューマーになるようにすることです。グループのメンバーシップを維持するプロセスは、Kafka プロトコルによって動的に処理されます。新しいインスタンスがグループに参加すると、グループの他のメンバーから一部のパーティションを引き継ぎます。インスタンスが停止した場合、そのパーティションは残りのインスタンスに分散されます。 Kafka は、トピック内の異なるパーティションのレコード間の集約順序ではなく、パーティション内のレコードの集約順序のみを提供します。ほとんどのアプリケーションでは、パーティションによるソートとキーによるデータのパーティション分割機能を組み合わせるだけで十分です。ただし、レコードの完全な順序付けが必要な場合は、パーティションが 1 つだけのトピックを使用してこれを実現できますが、この場合、コンシューマー グループごとにコンシューマー プロセスが 1 つだけになります。 1.5 Kafkaが保証する消費者
1.6 メッセージングシステムとしての KafkaKafka のストリームの概念は、従来のエンタープライズ メッセージング システムとどのように異なりますか? (1)従来のメッセージングシステム 従来、メッセージング モデルにはキューイングとパブリッシュ/サブスクライブの 2 つがあります。キューでは、コンシューマーのプールがサーバーから読み取り、各レコードがいずれかのコンシューマーに送信されます。パブリッシュ/サブスクライブでは、レコードはすべてのコンシューマーにブロードキャストされます。これら 2 つのモデルにはそれぞれ長所と短所があります。キューイングの利点は、データ処理を複数のコンシューマー インスタンスに分割できるため、処理を拡張できることです。残念ながら、キューはマルチサブスクライバーではないため、プロセスがデータを読み取るとすぐに消えてしまいます。パブリッシュ/サブスクライブでは、複数のプロセスにデータをブロードキャストできますが、すべてのメッセージがすべてのサブスクライバーに送信されるため、スケーラブルな処理はできません。 Kafka の消費者グループの概念は、これら 2 つの概念を一般化します。キューと同様に、コンシューマ グループを使用すると、一連のプロセス (コンシューマ グループのメンバー) 間で処理を分割できます。パブリッシュ/サブスクライブと同様に、Kafka では複数のコンシューマー グループにメッセージをブロードキャストできます。 (2)カフカの利点 Kafka モデルの利点は、すべてのトピックがこれらの両方の特性 (処理をスケーリングでき、マルチサブスクライバーでもある) を備えているため、どちらか一方を選択する必要がないことです。 Kafka は従来のメッセージング システムよりも強力な順序保証を備えています。 従来のキューはサーバー上でレコードを順番に保持し、複数のコンシューマーがキューから消費する場合、サーバーはレコードを格納された順序で配布します。ただし、サーバーはレコードを順番にディスパッチしますが、レコードはコンシューマーに非同期的に配信されるため、異なるコンシューマーでは順序どおりに表示されない場合があります。これは実質的に、並列消費がある場合にレコードの順序が失われることを意味します。メッセージング システムは通常、1 つのプロセスのみがキューから消費できるようにする「排他的コンシューマー」の概念によってこの問題を解決しますが、もちろん、これは処理に並列性がないことを意味します。 Kafka の方が優れています。トピック内に並列処理の概念 (パーティション) を持たせることで、Kafka はコンシューマー プロセスのプール全体にわたって順序の保証と負荷分散を提供できます。これは、トピック内のパーティションをコンシューマー グループ内のコンシューマーに割り当て、各パーティションがグループ内の 1 つのコンシューマーによってのみ消費されるようにすることで実現されます。こうすることで、コンシューマーがそのパーティションの唯一のリーダーとなり、データを順番に使用することが保証されます。パーティションが多数あるため、多くのコンシューマー インスタンス間で負荷を分散できます。ただし、コンシューマー グループ内のパーティション数よりも多くのコンシューマー インスタンスは存在できないことに注意してください。 1.7 ストレージシステムとしての Kafka
1.8 ストリーム処理のための Kafka
2. Kafkaの使用シナリオ2.1 メッセージングKafka は、従来のメッセージ ブローカーの代替として使用できます。メッセージ ブローカーは、さまざまな理由 (データ プロデューサーからの処理の分離、未処理のメッセージのバッファリングなど) で使用されます。 Kafka は、ほとんどのメッセージング システムよりも優れたスループット、組み込みのパーティショニング、レプリケーション、フォールト トレランスを備えているため、大規模なメッセージ処理アプリケーションに最適なソリューションです。 経験則として、メッセージングの使用は通常は比較的低いですが、エンドツーエンドのレイテンシを低く抑える必要があり、Kafka が提供する強力な耐久性の保証に依存することがよくあります。 この分野では、Kafka は ActiveMQ や RabbitMQ などの従来のメッセージング システムに匹敵します。 2.2 ウェブサイトアクティビティの追跡Kafka の元々の使用例は、ユーザー アクティビティ追跡パイプラインをリアルタイムのパブリッシュ/サブスクライブ フィードのセットとして再構築できるようにすることでした。つまり、サイト アクティビティ (ページ ビュー、検索、またはユーザーが実行するその他のアクション) は、アクティビティ タイプごとに 1 つのトピックで中央トピックに公開されます。これらのフィードは、リアルタイム処理、リアルタイム監視、オフライン処理およびレポート作成のための Hadoop またはオフライン データ ウェアハウス システムへのロードなど、さまざまなユース ケースの注文に使用できます。 ユーザーのページビューごとに多くのアクティビティ メッセージが生成されるため、アクティビティ トラッキングは通常非常に高くなります。 2.3 メトリクスKafka は運用監視データによく使用されます。これには、分散アプリケーションからの統計を集約して、運用データの集中フィードを生成することが含まれます。 2.4 ログの集約多くの人がログ集約ソリューションの代わりとして Kafka を使用しています。ログ集約では通常、サーバーから物理ログ ファイルが収集され、処理のために中央の場所 (ファイル サーバーまたは HDFS など) に配置されます。 Kafka はファイルの詳細を抽象化し、ログまたはイベント データをメッセージのストリームとしてよりきれいに表示します。これにより、処理のレイテンシが低減され、複数のデータ ソースと分散データ消費のサポートが容易になります。 Scribe や Flume などのログ中心のシステムと比較して、Kafka は、レプリケーションによる強力な耐久性保証と、エンドツーエンドのレイテンシの低減により、同様に優れたパフォーマンスを提供します。 2.5 ストリーム処理多くの Kafka ユーザーは、複数のステージで構成されるパイプラインとしてデータを処理します。パイプラインでは、生の入力データが Kafka トピックから消費され、その後、さらなる消費または後続の処理のために、集約、拡充、またはその他の方法で新しいトピックに変換されます。 たとえば、ニュース記事を推奨するための処理パイプラインは、RSS フィードから記事のコンテンツをスクレイピングし、「記事」トピックに公開する場合があります。さらに処理を進めると、このコンテンツが正規化または重複排除され、クリーンアップされた記事コンテンツが新しいトピックに公開される可能性があります。最終処理段階では、このコンテンツをユーザーに推奨しようとする可能性があります。このような処理パイプラインは、さまざまなトピックに基づいてリアルタイム データ ストリームのグラフを作成します。 0.10.0.0 以降では、Apache Kafka で Kafka Streams という軽量でありながら強力なストリーム処理ライブラリを使用して、上記のようなデータ処理を実行できます。 Kafka Streams に加えて、他のオープンソース ストリーム処理ツールには Apache Storm や Apache Samza などがあります。 2.6 イベントソーシングイベント ソーシングは、状態の変化が時間順のレコードのシーケンスとして記録されるアプリケーション設計のスタイルです。 Kafka は非常に大きなログ データの保存をサポートしているため、このスタイルで構築されたアプリケーションにとって優れたバックエンドになります。 2.7 ログの送信Kafka は分散システムの外部コミット ログとして使用できます。ログはノード間でデータを複製するのに役立ち、障害が発生したノードがデータを回復するための再同期メカニズムとして機能します。 Kafka のログ圧縮機能は、この使用法をサポートするのに役立ちます。この使用法では、Kafka は Apache BookKeeper プロジェクトに似ています。 3. Kafkaのインストール3.1 ダウンロードとインストール公式 Web サイト http://kafka.apache.org/downloads.html にアクセスして、必要なバージョンをダウンロードします。 注: Kafka コンソール スクリプトは Unix ベースと Windows ベースのプラットフォームで異なるため、Windows プラットフォームでは bin/ ではなく bin\windows\ を使用し、スクリプト拡張子を .bat に変更します。
3.2 Zookeeperの設定と起動kafka を正常に実行するには、zookeeper を構成する必要があります。そうしないと、kafka クラスターもクライアントの Survivor と Consumer も正常に動作しません。そのため、Zookeeper サービスを設定して起動する必要があります。 (1)ZookeeperにはJava環境が必要
(2)ここでのKafkaダウンロードパッケージにはすでにZookeeperサービスが含まれているため、設定ファイルを変更して起動するだけで済みます。 Zookeeper の特定のバージョンをダウンロードする必要がある場合は、Zookeeper の公式 Web サイト http://mirrors.shu.edu.cn/apache/zookeeper/ にアクセスして、指定されたバージョンをダウンロードできます。
注: Zookeeperの設定は自分で追加したり変更したりできます 3.3 Kafka の設定(1)設定ファイルを変更する
注: 必要に応じて設定ファイルを変更できます。
(2)環境変数を設定する
(3)サービス起動スクリプトを設定する
3.4 Kafkaサービスを開始する(1)バックグラウンドでZookeeperサービスを開始する
(2)Kafkaサービスを開始する
4. Kafka を使い始める4.1 トピックを作成するパーティションが 1 つだけ含まれ、レプリカが 1 つだけある「along」というトピックを作成します。
list topic コマンドを実行すると、トピックが表示されます。
4.2 メッセージを送信するKafka には、ファイルまたは標準入力から入力を受け取り、それをメッセージとして Kafka クラスターに送信するコマンドライン クライアントが付属しています。デフォルトでは、各行は個別のメッセージとして送信されます。 プロデューサーを実行し、コンソールにメッセージを入力してサーバーに送信します。
4.3 コンシューマーを起動するKafka には、メッセージを標準出力にダンプするコマンド ライン コンシューマーもあります。
すべてのコマンドライン ツールには追加のオプションがあります。引数なしでコマンドを実行すると、引数の使用方法をより詳細に記録した情報が表示されます。 5. マルチブローカー Kafka クラスターの設定これまでは単一のブローカーで実行してきましたが、それでは面白くありません。 Kafka の場合、単一のブローカーはサイズ 1 のクラスターにすぎないため、いくつかのブローカー インスタンスを起動する以外に大きな変更はありません。しかし、感覚をつかむために、クラスターを 3 つのノード (引き続きローカル マシン上) に拡張してみましょう。 5.1 設定ファイルの準備
注: broker.id プロパティは、クラスター内の各ノードの一意かつ永続的な名前です。これらを同じマシン上で実行しており、すべてのエージェントが同じポートに登録するか、互いのデータを上書きするようにしたいため、ポートとログ ディレクトリをオーバーライドする必要があります。 5.2 クラスター内でさらに2つのKafkaサービスを有効にする
5.3 クラスタでの操作1) レプリケーション係数が3の新しいトピックmy-replicated-topicを作成します。
2) クラスターで「describe topics」コマンドを実行して、どのブローカーが何を実行しているかを確認します。
3) 作成した元のトピックで同じコマンドを実行して、それがどこにあるかを確認できます。
4) 新しいトピックにいくつかのメッセージを公開します。
5) 次に、次のメッセージを使用しましょう。
5.4 クラスタのフォールトトレランスのテスト1) 次にフォールトトレランスをテストします。ブローカー 2 がリーダーとして機能しているので、これを強制終了します。
2) リーダーがスレーブ ノードの 1 つに切り替え、ノード 2 は同期されたレプリカ セットに含まれなくなりました。
3) 書き込みを最初に受け入れたリーダーが失敗した場合でも、これらのメッセージは引き続き使用できます。
6. Kafka Connect を使用したデータのインポート/エクスポートコンソールからデータを書き込んでコンソールに書き戻すのは便利な出発点ですが、他のソースのデータを使用したり、Kafka から他のシステムにデータをエクスポートしたりする必要がある場合もあります。多くのシステムでは、カスタム統合コードを記述する代わりに、Kafka Connect を使用してデータをインポートまたはエクスポートできます。 Kafka Connect は、Kafka にデータをインポートおよびエクスポートするために使用される、Kafka に含まれるツールです。これは、外部システムと対話するためのカスタム ロジックを実装するコネクタを実行する拡張可能なツールです。このクイックスタートでは、ファイルから Kafka トピックにデータをインポートし、Kafka トピックからファイルにデータをエクスポートするシンプルなコネクタを使用して Kafka Connect を実行する方法について説明します。 1) まず、テスト用のシードデータを作成します。
2) 次に、スタンドアロン モードで実行される 2 つのコネクタを起動します。つまり、それらは単一のローカル専用プロセスで実行されます。パラメータとして 3 つの構成ファイルが提供されます。 1 つ目は常に Kafka Connect プロセスの構成であり、接続する Kafka ブローカーやデータのシリアル化形式などの共通構成が含まれます。 残りの構成ファイルでは、作成するコネクタを指定します。これらのファイルには、一意のコネクタ名、インスタンス化するコネクタ クラス、およびコネクタに必要なその他の構成が含まれます。
3) インポートが成功したかどうかを確認する(別のターミナルを起動する) 起動プロセス中に、コネクタがインスタンス化されていることを示すメッセージを含む、いくつかのログ メッセージが表示されます。 ① Kafka Connect プロセスが開始すると、ソース コネクタは test.txt トピックから行を読み取り、トピック connect-test に生成し、シンク コネクタはトピック connect-test からメッセージを読み取り、ファイル test.sink.txt に書き込み始めます。出力ファイルの内容を調べることで、データがパイプライン全体を通過したことを確認できます。
② データは Kafka トピック connect-test に保存されるので、コンソール コンシューマーを実行してトピック内のデータを表示することもできます (またはカスタム コンシューマー コードで処理することもできます)。
4) データを追加して検証を続ける
|
<<: AIを活用したインテリジェントオートメーションは、人間が「スーパーパワー」を獲得するのを助ける
>>: 今回は、一見神秘的なKubernetesを理解するお手伝いをします!
アリババグループは11月12日早朝、ダブル11プロモーション期間中のアリペイでの総売上高が191億円...
9月15日、深セン国際文化産業博覧会貿易フェア株式会社と深センテンセントコンピュータシステム株式会社...
virpus.com の旋風割引プロモーションが始まりました。SSD ハード ドライブを搭載したすべ...
私は長年 SEO 業務に携わっており、検索エンジン最適化についてある程度理解しています。私は主に機械...
edgevm.com は、サンノゼとニューヨークの 2 つのデータ センターから特別なプロモーション...
Hawkhost は、OpenVZ ベース、バースト メモリ搭載、データ センターはダラスの VPS...
現状を受けて、Kuaibo は大胆な自己革命を実行しました。 4月16日夜、Qvodは新浪微博を通じ...
最近はフレンドリーリンクの作業を手伝ったり、もちろんローカルサイトの状況も見たりしています。交換以外...
大河網(宋翔楽記者)インターネット上で国民の名誉が毀損され攻撃された場合、侵害発言を掲載したウェブサ...
Docker はコンテナと同義であり、K8S はコンテナ オーケストレーションと同義です。これら 2...
WeChat マーケティングは多くの企業にとって必要な手段の 1 つになっていますが、うまく実行して...
今日、あらゆるビジネスはデータ主導型であるべきです。データからクラウド サービス、ユーザー エクスペ...
タイのサーバー会社である Datatan は、2004 年に設立され、2009 年に正式に登録された...
劉愛林記者と季家鵬記者が北京から報告した。それから1か月も経たないうちに、Zhongdai.comは...
raksmart シンガポールデータセンターはどうですか? raksmart コンピュータ ルームに...