カフカの面接でよくある20の質問と回答

JAVAインタビューブック、もうJAVAインタビューは問題ありません、シリーズ記事のアドレスは、このリンクをクリックしてください。

目次

1. Kafka のコンシューマはプル (プル) モードですか、それともプッシュ (プッシュ) モードですか。このモードの利点は何ですか?

2. Kafka はメッセージステータスの追跡方法を維持します

3. カフカにとって動物園の飼育員の役割は何ですか?

4. Kafka がノードがまだ生きていると判断する 2 つの条件は何ですか?

5. Kafka の ack の 3 つのメカニズムについて話す

6. (スタンドアロンではなく) 分散された Kafka の場合、メッセージの順次消費を保証するにはどうすればよいですか?

7. Kafka はどのようにして重複データを消費しないのでしょうか? 例えば控除ですが、繰り返し控除することはできません。

8. Kafka クラスターの構成について教えてください。

9. カフカとは何ですか?

10. パーティションデータファイル (offffset、MessageSize、data)

11. Kafka はどのようにして効率的なデータ読み取りを実現しますか? (シーケンシャル読み取りおよび書き込み、セグメント化されたコマンド、バイナリ検索)

12. Kafka コンシューマー側でのリバランス操作はいつ行われますか?

13. Kafka の ISR (InSyncRepli)、OSR (OutSyncRepli)、AR (AllRepli) は何を表しますか?

14. Kafka の HW、LEO などは何を表しますか?

15. Kafka がこれほど高いパフォーマンスを実現できるようにする Kafka の設計は何ですか?

16. Kafka が読み取りと書き込みの分離をサポートしていないのはなぜですか?

17. パーティション リーダーの選出戦略はいくつありますか?

18. どのようなシナリオで Kafka を選択するかを簡単に説明してください。

19. Kafka データの一貫性の原則について話してください

20. Kafka の欠点は何ですか?



1. Kafkaのコンシューマーはプル ( pull )モードですか、それともプッシュ (プッシュ)モードですか。このモードの利点は何ですか?

Kafka は、ほとんどのメッセージング システムに共通する従来の設計に従っています。プロデューサーはメッセージをブローカーにプッシュし、コンシューマーはブローカーからメッセージをプルします。

利点: プル モードでは、コンシューマーがブローカーからバッチでデータをプルするかどうかを独自に決定しますが、プッシュ モードでは、コンシューマーの消費容量がわからないとプッシュ速度を制御することが困難です。速すぎるとコンシューマーがクラッシュする可能性があります。遅すぎると無駄が生じる可能性があります。

欠点: ブローカーに消費するメッセージがない場合、コンシューマは新しいメッセージが到着するまでループでポーリングを続けることになります。これを回避するために、Kafka には新しいメッセージが到着するまでコンシューマがブロックできるパラメータがあります (もちろん、メッセージの数が一定量に達するまでブロックして、バッチで送信することもできます)。

2.メッセージステータスを維持するkafkaの追跡方法

Kafka のトピックは複数のパーティションに分割されており、各パーティションは同時に 1 つのコンシューマによってのみ消費されます次に、オフセットを使用してメッセージの場所をマークし、場所のオフセットを使用して消費ステータスを追跡します。他のメッセージ キューと比較して、「ブローカーはメッセージがコンシューマに配信された後すぐにマークするか、顧客の通知を待ってからマークする」を使用する利点は、通信メッセージが配信された後のプログラムのクラッシュやメッセージ損失の可能性を回避できることです。または繰り返し消費する場合。同時に、メッセージの状態を維持する必要がなく、ロックも必要ないため、スループットが向上します。

3.カフカにとって動物園の飼育員の役割は何ですか?

Zookeeper は主にクラスター内の異なるノード間で通信するために使用され、Kafka ではオフセットをコミットするために使用されます。そのため、いずれの場合でもノードに障害が発生した場合、以前にコミットされたオフセットから取得することができ、とりわけ、次のような他のアクティビティを実行します。 : リーダーの検出、分散同期、構成管理、新しいノードの離脱または接続の認識、クラスタリング、ノードのリアルタイム ステータスなど。

4. Kafka がノードがまだ生きていると判断する2つの条件は何ですか?

(1) ノードは ZooKeeper との接続を維持する必要があり、Zookeeper はハートビート メカニズムを通じて各ノードの接続をチェックします
(2) ノードがフォロワーの場合は、リーダーの書き込み操作を時間内に同期できなければなりません。遅延が長すぎてはいけません

5. Kafkaackの 3 つのメカニズムについて話す

request.required.acks には、次の 3 つの値 0 1 -1 (すべて) があります:
0 :プロデューサーはブローカーの ACK を待ちませんが、遅延は最も低くなりますが、ストレージの保証は最も弱くなります。サーバーがハングアップすると、データは失われます。
1 :サーバーは、ACK 値のリーダー コピーがメッセージの受信を確認するのを待ってから、ACK を送信します。ただし、リーダーが電話を切った場合、新しいリーダーへのコピーが完了したかどうかは保証されず、データが発生する可能性もあります。損失。
-1(all) :データが失われないように、サーバーはフォロワーのすべてのコピーがデータを受信した後にリーダーによって送信された ack を受信します。

6. (スタンドアロンではなく) 分散されたKafkaの場合、メッセージの順序消費を保証するにはどうすればよいですか?

Kafka でメッセージを送信する場合、3 つのパラメーター (トピック、パーティション、キー) を指定できます。パーティションとキーはオプションです。

Kafka の分散単位はパーティションであり、同じパーティションは先書きログで構成されるため、FIFO の順序が保証されます。異なるパーティション間での順序は保証されません。したがって、パーティションを指定して、対応するメッセージを同じパーティションに送信することができ、コンシューマー側では、Kafka はパーティションを 1 つのコンシューマーによってのみ使用できることを保証し、これらのメッセージの連続的な使用を実現できます。

さらに、キー (順序 ID など) を指定することもでき、同じキーを持つすべてのメッセージが同じパーティションに送信され、メッセージの順序も実現されます。

7. Kafka はどのようにして重複データを消費しないのでしょうか? 例えば控除ですが、繰り返し控除することはできません。

この質問をするもう 1 つの方法は、Kafka がメッセージの冪等性をどのように保証するかということです。メッセージ キューの場合、メッセージが繰り返される可能性が非常に高いため、メッセージ キューに完全に依存することはできず、代わりにデータの整合性冪等性チェックをビジネス層で実行する必要があります。

たとえば、処理するデータをデータベース (mysql、redis など) に書き込む必要がある場合は、まず主キーに基づいてデータを確認する必要があります。すべてのデータがある場合は、そのデータの挿入を中止し、他の作業を実行する必要があります。メッセージの登録や更新などの操作を行います。さらに、データが繰り返し挿入されないように、データベース レベルで一意のキーを設定することもできます。一般に、プロデューサーはメッセージを送信するときに、グローバルに一意の ID を保持する必要があります。

8. Kafkaクラスターの構成について教えてください

Kafka のクラスター図は次のとおりです。

ブローカー(代理店)

Kafka クラスターは通常、ロード バランスを維持するために複数のブローカーで構成されます。Kafka ブローカーはステートレスであるため、ZooKeeper を使用してクラスターの状態を維持します。Kafka ブローカー インスタンスは 1 秒あたり数十万の読み取りと書き込みを処理でき、各ブローカーはパフォーマンスに影響を与えることなく TB のメッセージを処理できます。Kafka ブローカー リーダーの選出は ZooKeeper によって実行できます。

動物園の飼育員

ZooKeeper は、Kafka ブローカーの管理と調整に使用されます。ZooKeeper サービスは主に、Kafka システムの新しいブローカーまたは Kafka システムのブローカーの障害をプロデューサーとコンシューマに通知するために使用されます。Zookeeper がブローカーの存在または失敗に関する通知を受け取るかどうかに応じて、プロデューサーとコンシューマーは決定を下し、他のブローカーとのタスクの調整を開始します。

プロデューサー_

プロデューサーはデータをブローカーにプッシュします。新しいブローカーが開始されると、すべてのプロデューサーがそれを検索し、この新しいブローカーにメッセージを自動的に送信します。Kafka プロデューサーはブローカーからの確認応答を待たず、ブローカーが処理できる限り早くメッセージを送信します。

消費者_

Kafka ブローカーはステートレスであるため、コンシューマはパーティション オフセットを使用して消費されたメッセージの数を維持する必要があることを意味します。コンシューマが特定のメッセージ オフセットを確認した場合、それはコンシューマが以前のメッセージをすべて消費したことを意味します。コンシューマーはブローカーに非同期プル リクエストを発行して、バイト バッファーを使用できる状態にします。コンシューマーは、オフセット値を指定するだけで、パーティション内の任意のポイントに巻き戻したり、ジャンプしたりできます。コンシューマのオフセット値は ZooKeeper によって通知されます。

9.カフカとは何ですか?

Kafka は、もともと LinkedIn によって開発され、Scala 言語で書かれた高スループットの分散型パブリッシュ/サブスクライブ ベースのメッセージング システムであり、現在は Apache のオープン ソース プロジェクトです。

ブローカー: Kafka サーバー。メッセージの保存と転送を担当します。

トピック: メッセージ カテゴリ。Kafka はトピックに従ってメッセージを分類します。

パーティション: トピック パーティション。トピックには複数のパーティションを含めることができ、トピック メッセージは各パーティションに保存されます。 4. オフセット: ログ内のメッセージの位置。パーティション上のメッセージのオフセットとして理解でき、また、メッセージのシリアル番号を表す唯一の番号

プロデューサー:メッセージプロデューサー

コンシューマ: メッセージコンシューマ

Consumer Group: コンシューマのグループ化。各コンシューマはグループに所属する必要があります。

Zookeeper: クラスター ブローカー、トピック、パーティション、その他のメタ データを保存します。さらに、ブローカーの障害検出、パーティション リーダーの選択、ロード バランシングなどの機能も担当します。

10.パーティションデータファイル( offffset MessageSize data )

パーティション内の各メッセージには、offset、MessageSize、data の 3 つの属性が含まれます。offset は、このパーティション内のメッセージのオフセットを表します。offset は、パーティション データ ファイル内のメッセージの実際の格納場所ではなく、論理的な値です。 offset はパーティション内のメッセージの ID、MessageSize はメッセージ内容データのサイズ、data はメッセージの特定の内容であると考えることができます。

11. Kafka はどのようにしてデータの効率的な読み取りを実現しますか? (シーケンシャル読み取りおよび書き込み、セグメント化されたコマンド、バイナリ検索)

Kafka は、セグメント化されたデータ ファイルごとにインデックス ファイルを作成します。ファイル名はデータ ファイル名と同じですが、ファイル拡張子は Index です。インデックス ファイルは、データ ファイル内のメッセージごとにインデックスを作成しませんが、スパース ストレージ方式を使用して、データの特定のバイトごとにインデックスを作成します。これにより、インデックス ファイルが過剰なスペースを占有することがなくなり、インデックス ファイルをメモリ内に保持できます。

12. Kafkaコンシューマー側でのリバランス操作はいつ行われますか?

  • 同じコンシューマ コンシューマ グループ group.id に新しいコンシューマが追加され、リバランス操作が実行されます。
  • コンシューマは、現在の期間内に、所属するコンシューマ グループを離れます。ダウンタイムなどの
  • パーティション数が変更された場合(つまり、トピックのパーティション数が変更された場合)
  • 消費者が自発的に購読を解除する

リバランスのプロセスは次のとおりです。

ステップ 1: すべてのメンバーは、グループに参加するためのリクエストをコーディネーターに送信します。すべてのメンバーがリクエストを送信すると、コーディネーターはリーダーとして機能するコンシューマーを選択し、グループ メンバー情報とサブスクリプション情報をリーダーに送信します。

ステップ 2: リーダーは、どのコンシューマがどのトピックのどのパーティションを消費するかを指定して、消費計画の割り当てを開始します。割り当てが完了したら、リーダーは計画をコーディネーターに送信します。割り当て計画を受け取った後、コーディネーターはその計画を各コンシューマに送信し、グループ内のすべてのメンバーがどのパーティションを消費する必要があるかを知ることができます。

リバランスではコーディネーターが重要な役割を果たします

13. KafkaISR (InSyncRepli) OSR (OutSyncRepli) 、およびAR (AllRepli)は何を表しますか?

回答: リーダー コピーとのある程度の同期を維持する Kafka のコピー (リーダーを含む) は、ISR を形成します。リーダーに遅れをとりすぎるレプリカは OSR を形成します。パーティション内のすべてのレプリカは、総称して AR と呼ばれます。

ISR:リーダーとの速度差が10秒未満のフォロワーの集合
OSR:リーダーとの速度差が10秒以上のフォロワー
AR:全パーティションのフォロワー

14. KafkaHW LEOなどは何を表しますか?

回答: HW: 高水位。これは、消費者がこのオフセットの前にのみデータを取得できることを意味します。

LEO: 現在のログ ファイルに書き込まれる次のメッセージのオフセットを識別します。そのサイズは、現在のログ ファイルの最後のメッセージのオフセット + 1 に等しくなります。

15. Kafkaの高いパフォーマンスを実現するKafkaの設計は何ですか?

1. Kafka は分散メッセージ キューです。
2. ログ ファイルをセグメント化し、セグメントのインデックスを作成します。
3. (単一ノードの場合) シーケンシャル読み取りおよび書き込みを使用します。速度は 600M/s に達します
。 4. ゼロ コピーへの参照、読み取りおよび書き込み操作は OS システムで完了します

16. Kafka が読み取りと書き込みの分離をサポートしていないのはなぜですか?

1. CAP 理論では、C (一貫性) と A (可用性) のいずれか 1 つしか保証できないことがわかっているため、これは実際には分散シナリオでよくある問題です。読み取りと書き込みの分離がサポートされている場合、実際には、一貫性 通常のシナリオでは、コピー間のデータの一貫性は同期によって実現され、同期プロセス中には確実に時間がかかるため、要件にはある程度の割引がある可能性があります。読み取りと書き込みの分離がサポートされている場合、それは意味します。データに一貫性がないか、データが遅れている可能性があります。

2. リーダー/フォロワー モデルでは、フォロワー コピーが外部読み取りサービスを提供できないとは規定されていません。多くのフレームワークではこれを許可していますが、Kafka では当初、不整合の問題を避けるためにリーダーが一律にサービスを提供できる方法を採用していました。

3. ただし、Kafka 2.4 以降、Kafka は限定的な読み取りと書き込みの分離を提供します。つまり、フォロワー コピーは外部読み取りサービスを提供できます。

17.パーティションリーダーの選出戦略はいくつありますか?

パーティションのリーダー コピーの選択はユーザーに対して完全に透過的であり、コントローラーによって独立して完了します。答える必要があるのは、どのシナリオでパーティション リーダーの選択を実行する必要があるかということです。各シナリオは選挙戦略に対応します。

1. OfflinePartition リーダーの選出: パーティションがオンラインになるたびに、リーダーの選出を実行する必要があります。いわゆるパーティションがオンラインになることは、新しいパーティションが作成されること、または以前はオフラインだったパーティションがオンラインに戻ることである可能性があります。これは、最も一般的なパーティション リーダーの選出シナリオです。

2. ReassignPartition Leader の選出: Kafka-reassign-partitions コマンドを手動で実行するか、Admin の alterPartitionReassignments メソッドを呼び出してパーティション コピーの再割り当てを実行すると、このタイプの選出がトリガーされることがあります。元の AR が [1, 2, 3]、リーダーが 1 であるとすると、レプリカの再割り当てを実行すると、レプリカ セットの AR は [4, 5, 6] に設定されます。当然、リーダーを変更して再割り当てする必要があります。この時点でパーティションリーダーの選挙が行われます。

3. PreferredReplicaPartition リーダーの選出: Kafka-preferred-replica-election コマンドを手動で実行するか、優先リーダーの選出を自動的にトリガーすると、このタイプの戦略がアクティブになります。いわゆる優先リーダーは、AR の最初のコピーを指します。たとえば、AR が [3, 2, 1] の場合、優先リーダーは 3 になります。

4. ControlledShutdownPartition リーダー選挙: ブローカーが正常にシャットダウンすると、ブローカー上のすべてのリーダー コピーがオフラインになるため、影響を受けるパーティションに対して対応するリーダー選挙を実行する必要があります。

これら 4 種類の選挙戦略の一般的な考え方は似ています。つまり、AR から ISR の最初のコピーを新しいリーダーとして選択します。

18.どのようなシナリオでKafka を選択するかを簡単に説明してください

• ログ収集: 企業は Kafka を使用してさまざまなサービスのログを収集し、Hadoop、HBase、Solr などの統合インターフェイス サービスとして Kafka を通じてさまざまな消費者に公開できます。
•メッセージ システム: プロデューサとコンシューマの分離、メッセージのキャッシュなど。
• ユーザー アクティビティの追跡: Kafka は、Web ユーザーやアプリ ユーザーのさまざまなアクティビティ (Web の閲覧、検索、クリック、その他のアクティビティなど) を記録するためによく使用されます。これらのアクティビティ情報は、各サーバーによって Kafka のトピックに公開され、サブスクライバーに公開されます。リアルタイムの監視と分析のためにこれらのトピックを購読したり、オフライン分析やマイニングのために Hadoop またはデータ ウェアハウスにロードしたりできます。
• 運用インジケーター: Kafka は、運用監視データの記録にもよく使用されます。これには、さまざまな分散アプリケーションからのデータの収集や、アラームやレポートなどのさまざまな操作に対する一元的なフィードバックの生成が含まれます。• ストリーム処理: Sparkストリーミングや Flink
など

19. Kafkaデータの一貫性の原則について話してください

一貫性とは、古いリーダーであっても、新たに選出されたリーダーであっても、消費者が同じデータを読み取ることができることを意味します。


パーティションに 3 つのコピーがあり、コピー 0 がリーダー、コピー 1 とコピー 2 がフォロワーで、ISR リストに含まれているとします。コピー 0 は Message4 を書き込んでいますが、Consumer は Message2 しか読み取ることができません。すべての ISR が Message2 を同期するため、コンシューマは最高水準点を超えるメッセージのみを読み取ることができます。また、最高水準点は、ISR リスト内のオフセットが最も小さいパーティションに依存します。これは、上の図のコピー 2 に対応します。これは、次の図に非常に似ています。バレルの原理。

その理由は、十分なレプリカによって複製されていないメッセージは「安全ではない」とみなされ、リーダーがクラッシュして別のレプリカが新しいリーダーになった場合に失われる可能性が高いためです。消費者がこれらのメッセージを読むことを許可すると、一貫性が損なわれる可能性があります。想像してみてください。コンシューマが現在のリーダー (コピー 0) からのメッセージ 4 を読み取って処理します。この時点で、リーダーは電話を切り、コピー 1 を新しいリーダーとして選択します。このとき、別のコンシューマが新しいリーダーからのメッセージを読み取ります。このメッセージは実際には存在しないことが判明し、データの不整合の問題が発生しました。

もちろん、ハイ ウォーター マーク メカニズムの導入により、何らかの理由でブローカー間のメッセージ レプリケーションが遅くなり、メッセージがコンシューマに到達するまでの時間も長くなります (メッセージがコピーされるのを待つことになるため)初め)。遅延時間は、replica.lag.time.max.ms パラメーターを使用して構成できます。これは、メッセージを複製するときにレプリカが許容できる最大遅延時間を指定します。

20. Kafkaの欠点は何ですか?

バッチで送信されるため、データはリアルタイムではありません;
• mqtt プロトコルをサポートしません;
• IoT センサー データへの直接アクセスをサポートしません;
• ユニファイド パーティション内のメッセージの順序のみをサポートします。グローバル メッセージの順序を達成できません
。完璧ですが、プラグインをインストールする必要があります。
• メタデータ管理には Zookeeper を使用します。

JAVAインタビューブック、もうJAVAインタビューは問題ありません、シリーズ記事のアドレスは、このリンクをクリックしてください。https://blog.csdn.net/wanghaiping1993/article/details/125075785

おすすめ

転載: blog.csdn.net/wanghaiping1993/article/details/125346010