Kafka の情報はどのように消費されるのでしょうか?

Kafka の情報はどのように消費されるのでしょうか?

クローラー エンジニアにとって、Kafka は単なるメッセージ キューです。データの書き込み方法と読み取り方法を知っておくだけで十分です。

[[285596]]

覚えておいてください: Kafka の使用は簡単ですが、Kafka クラスターの構築、保守、調整は面倒です。 Kafka クラスターは専任の担当者によって保守される必要があります。この仕事が簡単にできると思ってはいけません。 「この記事と、Kafka に関する今後のいくつかの記事は、クローラー エンジニアまたは Kafka を使用する必要があるだけの読者を対象としています。Kafka のより深い詳細とコア原則については、ここで説明する範囲を超えています。便宜上、Kafka の一部の用語では、不正確ではありますが意味のある類推を使用します。インタビューでこれらの用語を説明する必要がある場合は、Kafka の公式ドキュメントをお読みください。」

今日議論するトピックの 1 つは、Kafka がどのようにして、単一プログラムの複数のプロセスに対して継続的な消費、ブレークポイントの再開、並列消費を実現するか、また、複数のプログラムが互いに影響を及ぼさず、独立していることを保証するかということです。

Kafka には複数の異なるキューが存在する場合があります。このキューをトピックと呼びます。キューの 1 つが次の図のようになっているとします。

情報は右から入って左から出てきます。これが Redis リストの場合、メッセージがポップアップ表示された後、キューは次のようになります。

左端のメッセージ 1 がありません。したがって、情報 1 を消費した直後にプログラムを閉じて再度開いた場合でも、プログラムは情報 2 から消費し続け、情報 1 を 2 回消費することはありません。

しかし、プログラムが 2 つある場合はどうなるでしょうか?プログラム 1 は各データを読み取り、それをデータベースに転送します。プログラム 2 は各データを読み取り、キーワードが含まれているかどうかを確認します。この場合、情報 1 はプログラム 1 とプログラム 2 で使用できるはずです。しかし、上記の解決策は明らかに実現可能ではありません。プログラム 1 が情報 1 を消費すると、プログラム 2 はそれを取得できなくなります。

そのため、Kafka では情報はキューに残りますが、次の図に示すように、プログラムごとに現在どのデータが消費されているかを記録するための個別のマーカーが存在します。

プログラム 1 が Kafka 内の次のデータを読み取ろうとすると、Kafka はまず現在の位置マーカーを 1 つ右に移動し、新しい値を返します。マークの移動とマークの戻りの 2 つの操作は、一緒にアトミック操作と見なされ、繰り返し読み取りの問題は発生しません。

プログラム 1 とプログラム 2 は異なるタグを使用するため、それぞれのタグが指す値は互いに影響しません。

プログラム3を追加する場合は、マークを1つ追加するだけです。この新しいマークも、以前の 2 つのマークの影響を受けません。

これにより、複数の異なるプログラムが Kafka を読み取るときに、それらが互いに影響を及ぼさないことが保証されます。

ここで、プログラム 1 の消費が遅すぎると考え、プログラム 1 を同時に 3 回実行した場合、マーキングとシフトはアトミック操作であるため、プログラムが同時に Kafka を読み取っているように見えても、Kafka はそれらを内部的に「キュー」に入れ、返される結果が重複したり、欠落したりしないようにします。

Kafka のチュートリアルをオンラインで見ると、Offset と呼ばれるものが言及されていることがわかります。これは実際には、この記事で言及されている各プログラムの現在のデータを指すマークです。

また、「グループ」というキーワードも表示されますが、これは実際にはこの記事のプログラム 1、プログラム 2、プログラム 3 に相当します。

同じキューに対して、複数のプログラムが異なるグループを使用して消費する場合、読み取るデータは互いに干渉しません。

同じキューに対して、同じグループの複数のプロセスがデータを消費すると、Redis で lpop 操作を実行するように見えます。

最後に、インターネット上の Kafka に関する記事では、必ず「Paritition」または「Chinese sharding」という単語が出てきます。そして、あなたはこのことを理解できないことに気づくでしょう。

気にしないで、忘れてください。トピックに含まれるパーティションの数と、同じグループを読み取るために最大でいくつのプロセスを開始できるかを知るだけで十分です。 ——トピックに 3 つのパーティションがある場合、同じグループを同時に読み取るために開くことができるプロセスは最大 3 つだけです。トピックに 5 つのパーティションがある場合、同じグループを読み取るために開始できるプロセスは最大 5 つだけです。

<<:  Inspurは、ビジネスからITまでのラストマイルをつなぐ最高のaPaaSソリューションを提供します

>>:  2020 年のエンタープライズ クラウド戦略の 5 つのトレンド

推薦する

raksmart: サイト全体の 10% 割引コード、生涯割引、サンノゼ コンピュータ ルーム、CN2 GIA

raksmartは、独自のサンノゼデータセンターを持つ古いブランドです。主に独立したサーバーのレンタ...

SEO 最適化: Sina Blog を通じて 1,000 以上のインデックス キーワードを最適化する実践的なケース スタディ

半月前、「seoトレーニング」というキーワードを検索していたとき(キーワードのランキングを追跡して観...

chicagovps-$39/C2750 オクタコア/8g メモリ/250g ハードドライブ/10T トラフィック/5IP

chicagovps からプロモーション メールが届きました。主に 4 台のサーバーとエンタープライ...

【ピークシーズン戦略2】初心者セラー向けSEOのヒント:キーワードの重みを向上させる鍵とは?

私の前回の記事を読んだ販売者はすでに SEO の原則と重要性について大まかに理解しているはずです。今...

NetEaseはウェブサイトアライアンスへの参加を正式に発表し、最初の収益は1億5000万ドルに達した。

2012年5月17日、NetEaseは北京で記者会見を開き、ウェブサイト同盟の正式発足と総額1億50...

SEOウェブサイトデザインで無視できない詳細

最適化に関しては、インターネットには「外部リンクは王様、内部リンクは皇帝」という格言が溢れており、多...

リモートワーク環境でクラウドコンピューティングを活用するための 10 の考慮事項

企業はリモートワーク環境でクラウドコンピューティングをどのように活用できるでしょうか?ここでは、組織...

PV値は重みに影響します。ベテランウェブマスターがPV値を向上させる方法を教えます

ウェブサイトの重さは、すべてのウェブサイトが追求する動機と目標です。ウェブサイトの重さを改善するには...

マルチクラウド環境で信頼を構築する方法

[[416858]]最新のアプリケーションにより、企業はデジタル イノベーション ファクトリーへと変...

成功するためのウェブサイトの始め方

無意識のうちに、Leixue のブログの更新が遅れてしまいました。Leixue のブログをフォローし...

Weiboマーケティングはどれほど重要ですか?こちらをご覧ください

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo はネットユー...

藍雲鋒:オンラインマーケティングにおける悪事と悪事の不在の概念について

オンライン マーケティング (OM) は、テクノロジー、知恵、安定性、勤勉さの組み合わせです。 OM...

Virtovo-Miami/$7/KVM/6 コア/2g メモリ/100g ハードディスク/4T トラフィック

Virtovo は設立されてまだ日が浅く、事業者が高構成でローエンド市場に参入するのはリスクがありま...

Green Radishアルゴリズムによる価値の高い内部ページ最適化は、ウェブサイトを際立たせるための基礎です。

最近のGreen Radishのアルゴリズムを考慮して、著者は自分のウェブサイトを実践して分析し、激...