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 つのトレンド

推薦する

クラウド コンピューティングに関する現在のビジネス アイデアは何ですか?

まず、クラウド コンピューティングのビジネス アイデアを、クラウド コンピューティングのサービス モ...

kvmla: 香港将軍澳データセンター VPS が 20% オフ、追加 1G メモリと Windows サポート付き

kvmla は香港の将軍澳に新しいデータセンターを追加し、現在 VPS を販売しています。新しいキャ...

Shardhost - 月額 7 ドル 1G KVM | 2G OpenVZ

Shardhost は、2011 年 6 月に英国で登録された小規模な VPS プロバイダーです (...

企業がWeChatマーケティングを展開する方法の簡単な分析

最近はいろいろなことに振り回されて、頭がちょっと足りないです。11月のキャンパス就職フェアもかなり忙...

精密マーケティングとPPC広告のROI原則

検索エンジンマーケティング理論では、PPC(クリック課金型広告)は企業のSEM戦略の中核と言えます。...

エンタープライズWeChatマーケティングとプロモーションスキル

WeChat マーケティングは、WeChat モバイル プラットフォーム (WeChat パブリック...

By-Health が Inspur Cloud と提携し、「ハイブリッド クラウド管理プラットフォーム」を構築

最近、「ネットワークセキュリティと情報化」誌とIT運用保守ネットワークは、「『DC Yinghao』...

現代の分散ストレージシステムをサポートするアルゴリズム

アプリケーションによって処理されるデータの量が増え続けるにつれて、ストレージの拡張はますます困難にな...

地域の親子ウェブサイトの運営に関するいくつかの考察

少し前に、A5 ウェブマスターのウェブサイトで「インターネット ローカリゼーション需要の次のトレンド...

AWS、Google Cloudに勝ち、クラウド災害復旧会社CloudEndureを2億5000万ドルで買収

CloudEndure は Google Cloud の目の前で推定 2 億 5000 万ドルで買収...

最近のデデクムの隠れた危険性とリスクを防ぐ方法について話す

Dedecms は、主に 2 つの主要なウェブマスター ネットワークの強力なサポートにより、ウェブサ...

SEOユーザーエクスペリエンスの競争環境は、隠れたニーズを掘り起こす段階にまで来ている。

検索エンジンは現在非常に成熟しており、ユーザー エクスペリエンスが Web サイトのランキングを左右...

アプリプロモーションの完全ガイド: 何かを得るために何かを犠牲にする

アプリ開発はもはや「お金持ちの愚か者たち」の温床ではありません。ますます多くの独立系モバイルアプリ開...

内部ページのSEO最適化を改善する方法

多くのウェブマスターは、ウェブサイトを構築する際にはコンテンツが重要であり、高品質のコンテンツを作成...