Kafka Consumer メッセージの消費と再バランスのメカニズム

Kafka Consumer メッセージの消費と再バランスのメカニズム

Kafka コンシューマー

Kafka にはコンシューマ グループの概念があります。各コンシューマーは、割り当てられているパーティションからのメッセージのみを消費できます。各パーティションは、コンシューマー グループ内の 1 つのコンシューマーのみが使用できます。したがって、同じコンシューマー グループ内のコンシューマーの数がパーティションの数を超えると、一部のコンシューマーには消費するパーティションが割り当てられません。消費者グループと消費者の関係は次の図に示されています。

消費者団体

Kafka コンシューマー クライアントがメッセージを消費するには、通常、次の手順が含まれます。

  • クライアントを構成してコンシューマーを作成する
  • トピックを購読する
  • メッセージを引き出して消費する
  • 消費変位を提出する
  • コンシューマーインスタンスを閉じる

プロセス

Kafka の Consumer クライアントはスレッドセーフではないため、スレッドの安全性を確保し、消費パフォーマンスを向上させるために、Consumer 側で Reactor に似たスレッド モデルを使用してデータを消費できます。

消費モデル

Kafka コンシューマーパラメータ

  • bootstrap.servers: ホスト:ポートの形式でブローカー アドレスに接続します。
  • group.id: コンシューマーが属するコンシューマー グループ。
  • key.deserializer: プロデューサーの key.serializer (キーのデシリアライズ方法) に対応します。
  • value.deserializer: プロデューサーの value.serializer (値のデシリアライズ方法) に対応します。
  • session.timeout.ms: コーディネーターが障害を検出するまでにかかる時間。デフォルト値は 10 秒です。このパラメータは、ハートビートの有効期限と同様に、コンシューマー グループが (グループ メンバー comsummer) クラッシュをアクティブに検出する時間間隔です。
  • auto.offset.reset: このプロパティは、オフセットのないパーティションまたは無効なオフセット (コンシューマーが長期間非アクティブであり、現在のオフセットが古くて削除されている) を持つパーティションを読み取るときにコンシューマーが実行する操作を指定します。デフォルト値は latest で、これは最新のレコード (コンシューマーの起動後に生成されたレコード) からデータを読み取ることを意味します。もう 1 つの値は earliest です。これは、オフセットが無効な場合に、コンシューマーが開始位置からデータを読み取ることを意味します。
  • enable.auto.commit: 変位を自動的にコミットするかどうか。 false の場合は、プログラム内で手動で変位をコミットする必要があります。正確に1回だけのセマンティクスの場合、手動で変位をコミットするのが最善です。
  • fetch.max.bytes: 一度に取得するデータの最大バイト数
  • max.poll.records: 1 回のポーリング呼び出しで返されるメッセージの最大数。処理ロジックが非常に軽量な場合は、この値を適切に増やすことができます。ただし、max.poll.records 個のデータは session.timeout.ms 内に処理する必要があります。デフォルト値は500です
  • request.timeout.ms: リクエスト応答の最大待機時間。タイムアウト期間内に応答が受信されない場合、Kafka はメッセージを再送信するか、再試行回数を超えた場合は直接失敗と見なします。

Kafka の再バランス

リバランスは、本質的には、コンシューマー グループ内のすべてのコンシューマーがサブスクライブされたトピックの各パーティションを割り当てるために合意に達する方法を指定するプロトコルです。たとえば、グループの下に 20 人のコンシューマーがいて、100 個のパーティションを持つトピックをサブスクライブしているとします。通常の状況では、Kafka は各コンシューマーに平均 5 つのパーティションを割り当てます。この割り当てプロセスはリバランスと呼ばれます。

いつリバランスするのでしょうか?

これも、よく言われる質問です。リバランスのトリガー条件は 3 つあります。

  • グループ メンバーシップが変更されます (新しいコンシューマーがグループに参加、既存のコンシューマーがグループを離れる、または既存のコンシューマーがクラッシュします。この 2 つの違いについては後で説明します)
  • 購読トピックの数が変更されました
  • サブスクリプショントピックのパーティション数が変更されました

グループ内でパーティションを割り当てるにはどうすればいいですか?

Kafka はデフォルトで、範囲とラウンドロビンの 2 つの割り当て戦略を提供します。もちろん、Kafka はプラグ可能な割り当て戦略を使用しており、独自のアロケータを作成してさまざまな割り当て戦略を実装できます。

Kafka の面接でよく聞かれる質問

  • Kafka ではどのようなコマンドライン ツールが利用できますか?どれを使ったことがありますか? /bin ディレクトリ、Kafka クラスターの管理、トピックの管理、Kafka の生成と使用。
  • Kafka Producer の実行プロセスとは何ですか?インターセプター、シリアライザー、パーティショナー、アキュムレーター。
  • Kafka Producer の一般的な構成は何ですか?ブローカー構成、ack 構成、ネットワークおよび送信パラメータ、圧縮パラメータ、ack パラメータ。
  • Kafka メッセージを整然とさせるにはどうすればよいでしょうか? Kafka はトピック レベルでは順序付けされておらず、パーティション レベルでのみ順序付けされます。そのため、処理順序を保証するために、パーティショナーをカスタマイズし、順番に処理する必要があるデータを同じパーティションに送信することができます。
  • プロデューサーはデータが失われないようにどのように保証しますか? ack メカニズム、再試行メカニズム。
  • プロデューサーのパフォーマンスを向上させるにはどうすればいいですか?バッチ、非同期、圧縮。
  • 同じグループ内のコンシューマーの数がパーツの数より多い場合、Kafka はどのように処理しますか?冗長パーツは役に立たない状態となり、データを消費しません。
  • Kafka Consumer はスレッドセーフですか?安全でない、シングルスレッド消費、マルチスレッド処理。
  • Kafka Consumer を使用してメッセージを消費する場合のスレッド モデルについて教えてください。なぜこのように設計されているのでしょうか?引っ張りとハンドリングが分離されています。
  • Kafka Consumer の一般的な構成は何ですか?ブローカー、ネットワーク、プル パラメータ、ハートビート パラメータ。
  • コンシューマーはいつクラスターから追い出されますか?クラッシュ、ネットワーク異常、処理時間が長すぎるため、送信変位タイムアウトが発生します。
  • Consumer が参加または離脱すると、Kafka はどのように反応しますか?リバランスを実行します。
  • リバランスとは何ですか? また、いつ行われますか?話題が変われば、消費者も変わります。

<<:  OLTP と OLAP のハイパーコンバージェンス: 次世代クラウドネイティブ データベースの設計

>>:  Zolvit が Linode でクラウド コストを 50% 削減した方法

推薦する

クラウドサービス市場はクラウドインフラストラクチャの3倍の速さで成長しています

分析会社Synergy Research Groupのデータによると、6つの主要なクラウドサービスと...

外部リンクを作成するSEO仲間へ

先週、何人かの友人から、フレンドリンクをより効果的に交換するにはどうしたらよいかと尋ねられました。私...

Meilishuo によるウォーターフォール フロー ウェブサイトの画像最適化の詳細を垣間見る

人間は視覚に敏感な動物であり、単調なテキストよりも画像を好むことが多いと言われています。インターネッ...

東にフェイントをかけ、西に攻撃する:必須のマーケティングツール

東にフェイントをかけながら西を攻撃するマーケティングは、私たちの生活の中では非常に一般的です。ただし...

hosteons: フランス VPS/ドイツ VPS オンライン、25% 割引、年間 18 ドル、1G/1 コア/20gSSD/2T トラフィック/10Gbps 帯域幅、無料バックアップ付き

Hosteons は、フランスの VPS とドイツの女子バレーボール チームを同時に立ち上げました。...

Apple App Store では悪意のあるレビューの投稿が広まり、大手メーカーのゲームが多数攻撃されています。

ひどい扱いを受けている? App Storeで悪質なレビュー操作が蔓延Game Gyroは、Appl...

出会い系サイト MiniDates: 出会いは宝くじのようなもの

他の出会い系アプリと比較して、MiniDatesはリアルな出会いを促進することに力を入れていますデー...

Baidu は広告会社としてのアイデンティティを捨て去るのだろうか?

5月18日、百度は香港での二次上場後初の財務報告となる四半期報告書を発表した。財務報告データによると...

123systems-5 USD/年-128M メモリ VPS-より安価な構成

123systems からプロモーション メールが届きました。同社のダラス データ センターは在庫切...

#米国 VPS# archhosting - 年額 15 ドル / メモリ 512 MB / ハードディスク 10 GB / トラフィック 250 GB

archhosting は 2017 年に設立された新しいホスティング プロバイダーです。主な事業は...

Kubernetes セキュリティからクラウドネイティブ アプリケーション セキュリティへ

多くの組織は、セキュリティの洞察を得るためにアプリケーション コードとインフラストラクチャをスキャン...

ウェブサイトの最適化とプロモーション - ウェブサイトディレクトリへの登録

ウェブマスターの皆さん、外部リンクを構築する方法をいくつご存知ですか? それとも、友好的なリンクの交...

クラウド アーキテクトを育成するために学ぶべき 5 つのこと

デジタル変革はあらゆる業種に影響を及ぼしており、クラウド アーキテクトは次世代のビジネス イニシアチ...

SEOは実行力だけでなく、データ分析も得意でなければならない

ご存知のとおり、SEO 最適化は非常に大変な仕事です。毎日同じことを何度も繰り返すことを意味します。...