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

推薦する

「漂流ボトル」がオンラインマーケティングの段階に入るかもしれない

インターネットの急速な発展に伴い、さまざまなマーケティング手法が次々と登場しています。マーケティング...

#Alipay# ionswitch-$15/年/KVM/512M メモリ/5gSSD/500g トラフィック/シアトル

年に設立された ionswitch は、独自の BGP ネットワークを運用し、独自の AS 番号を持...

食品・飲料業界のマーケティングに関する洞察

食品・飲料業界のマーケティング洞察レポートをご紹介します。 QuestMobileのデータによると、...

BAT はクラウド コンピューティング市場への参入に向けて協力しています。半分は海水、半分は火でしょうか?

5月23日、アリババクラウドは武漢オプティクスバレーにてアリババクラウドカンファレンス武漢サミットを...

Three Squirrels の WeChat 実験の秘密を明かす: 公開アカウントで下品な発言を避ける方法

【編集部注】ソーシャルマーケティングに長けたスナックブランド「Three Squirrels」も、W...

ソーシャルメディアマーケティングの有効性の簡単な分析

Weibo、コミュニティ、共有プラットフォーム、ライトブログなどのコミュニティプラットフォームの出現...

COVID-19パンデミックの影響を受けて、世界のエッジAIソフトウェア市場は急速な発展を遂げている

MarketsandMarkets は、エッジ AI ソフトウェア市場が 2019 年から 2021...

ソーシャルショッピングガイドがタオバオを喜ばせ、不安にさせるのはなぜか?

1. アリババの「エコシステム」約4年前、アリババの上級管理職は「電子商取引エコシステム」の構築に着...

誰もが推奨する Redis 分散ロックは本当に万全なのでしょうか?

単一インスタンス JVM には、アクセス制御用の synchronized キーワード、volati...

認定勝利: VirMac - 2.5 ドル/1g メモリ/15g SSD/1T トラフィック

VirMac は再び努力を始めました。まだ次の機能があります: ニューヨーク コンピュータ ルーム、...

XcodeGhost事件は成人における最も深刻な情報セキュリティ事件かもしれない

商業セキュリティ評価機関やアプリケーションソフトウェア開発者は、iOS システムが XcodeGho...

毎日の話題:アリババと民生銀行がインターネット金融の推進で協力

ウェブマスターネットワーク(www.admin5.com)は9月16日、アリババグループと中国民生銀...

フレームワーク: 分散理論 CAP、BASE

[[403371]]この記事はWeChatの公開アカウント「Sneak Forward」から転載した...

VPC の簡単な紹介

VPC の正式名称は Virtual Private Cloud で、中国語では仮想プライベートクラ...