この記事はWeChat公式アカウント「ポスト00年代プログラマーXiaosan」から転載したもので、著者は003です。この記事を転載する場合は、2000年代生まれのプログラマーXiaosanの公式アカウントにご連絡ください。 カフカとは何かKafka はもともと Linkedin によって開発され、2010 年に Apache Foundation に寄贈され、トップクラスのオープンソース プロジェクトになりました。これは、Scala と Java で記述されたオープンソースの [分散ストリーム処理プラットフォーム] でもあります (MQ システムとも呼ばれますが、純粋なメッセージング システムではありません)。 現在、Kafka は分散ストリーム処理プラットフォームとして位置付けられています。高いスループット、永続性、水平スケーラビリティ、ストリーム データ処理のサポートなどの機能により、広く使用されています。現在、Cloudera、Storm、Spark、Flinkなどのオープンソースの分散処理システムがKafkaとの統合をサポートし始めています。 生産者と消費者のメカニズムKafka では、プロデューサーはブローカーにメッセージを送信し、ブローカーはプロデューサーから送信されたメッセージをディスクに保存します。コンシューマーはブローカーからのメッセージをサブスクライブして消費する責任があります。コンシューマーはプル モードを使用してサーバーからメッセージをプルします。 Zookeeper は、クラスター全体のメタデータ管理とコントローラーの選択を担当します。詳細は以下の図に示されています。 Kafka プロデューサープロデューサーはブローカーパーティション戦略を送信します公開および購読の対象はトピックです。プロデューサーは指定されたトピックにメッセージを送信し、コンシューマーはサブスクライブされたトピックを消費します。 Kafka のパーティショニング メカニズムとは何ですか?トピックを複数のパーティションに分割し、各パーティションには複数のコピーがあり、同じトピックの下にある異なるパーティション内のメッセージも異なります。プロデューサーによって生成された各メッセージは、1 つのパーティションにのみ送信されます。 Kafka のパーティション番号は 0 から始まります。プロデューサーが 2 つのパーティション内のトピックにメッセージを送信する場合、このメッセージはパーティション 0 またはパーティション 1 のいずれかに格納されます。 では、特定のパーティションにメッセージを指定するにはどうすればよいでしょうか? ここで、プロデューサーの送信ロジックを見てみましょう。その前に、ProducerRecord と呼ばれるものについて知っておく必要があります。これは何ですか? ProducerRecord は、PR と呼ばれる基本データ情報をカプセル化してブローカーに送信されるキー/値のペアです。 内部構造
プロデューサー送信ロジック 1. パーティション ID が指定されている場合、PR は指定されたパーティションに送信されます。 2. パーティションIDが指定されていないがキーが指定されている場合、PRはハッシュ(キー)に従って対応するパーティションに送信されます。 3. パーティションIDもキーも指定されていない場合、PRはデフォルトのラウンドロビンモードを使用して各パーティションに送信します(コンシューマパーティションのデフォルトモードは範囲モードです)。 4. パーティション ID とキーの両方が指定されている場合、PR は指定されたパーティションにのみ送信されます (この時点ではキーは機能しません。コード ロジックによって決定されます) 注: パーティションには複数のコピーがありますが、このパーティションとプロデューサーおよびコンシューマー間のやり取りを担当する ReplicationLeader は 1 つだけです。 生産者からブローカーへの発送プロセス Kafka クライアントがサーバーにデータを送信すると (一度に 1 つのメッセージではなく)、データはメモリ バッファーを通過します。 KafkaProducer を介して送信されたメッセージは、最初にクライアントのローカル キャッシュに入り、その後、メッセージがバッチに収集され、一度にブローカーに送信されます。この方法でのみパフォーマンスを向上させることができます。 プロデューサー向け共通設定
Kafka の Consumer メカニズムとパーティション戦略の説明消費者はどのようなモードでブローカーからデータを取得しますか?ブローカーが積極的にプッシュするのではなく、プル モードになっているのはなぜですか? 答えは記事の冒頭の写真でご覧いただけます。コンシューマーは Pull メソッドを使用してブローカーのパーティションからデータを取得します。なぜプッシュモードではなくプルモードなのでしょうか?プルモードは、消費者の消費能力に応じて調整できます。消費者によってパフォーマンスは異なります。ブローカーにデータがない場合、コンシューマーはタイムアウトを設定してブロックし、戻る前にしばらく待機することができます。ただし、ブローカーが積極的にプッシュする場合、プッシュの利点はメッセージを迅速に処理できることですが、コンシューマーが処理できず、メッセージが蓄積され、遅延が発生する可能性が高くなります。 消費者はどのパーティションから消費しますか? トピックには複数のパーティションがあり、コンシューマー グループには複数のコンシューマーが存在することがわかります。どのように割り当てられるのでしょうか?トピックには複数のパーティション (リーダー パーティション) があるため、複数のコンシューマーが存在する場合があります。パーティション リーダーは、コンシューマー グループ内のコンシューマーによって消費される可能性があります。 では、消費者はどのパーティションから消費するのでしょうか? 戦略 1: ラウンドロビン (RoundRobinAssignor はデフォルトの戦略ではありません)。ラウンドロビン割り当ては、消費者グループに従って実行されます。同じ消費者グループが、さまざまなトピックを同じ方法で監視します。すべてのパーティションとすべてのコンシューマーがリストされます。したがって、コンシューマー グループ内のサブスクライブされたトピックは同じである必要があります。トピックが異なると、割り当てが不均等になります。たとえば、次の例をご覧ください。
これの欠点は何ですか?同じコンシューマー グループ内でサブスクライブされたメッセージが異なる場合、パーティションを実行するときに割り当てがラウンドロビンで行われず、パーティションの割り当てが不均一になる可能性があります。たとえば、3 つのコンシューマー C0、C1、C2 があり、合計 3 つのトピック t0、t1、t2 をサブスクライブしているとします。このとき、t0 には 1 つのパーティション (p0)、t1 には 2 つのパーティション (p0、p1)、t2 には 3 つのパーティション (p0、p1、p2) があります。コンシューマー C0 はトピック t0 をサブスクライブし、コンシューマー C1 はトピック t0 と t1 をサブスクライブし、コンシューマー C2 は t0、t1、および t2 をサブスクライブします。これはポーリング メカニズムであるため、C0 が T0 をサブスクライブする場合、C1 は T0 をサブスクライブできませんが、T1 をサブスクライブできます。 C2 も T0 をサブスクライブすることはできませんが、T1 と T2 は両方とも T0 をサブスクライブできます。この時点では、C2 のみが T2 をサブスクライブしており、他の C0 と C1 は表示されません。このとき、T2 のメッセージはコンシューマーである C2 によって消費されます。この状況は不均等分配の問題です。 戦略 2、範囲 (RangeAssignor のデフォルト戦略)、トピックごとに割り当てます。均等に分散されていない場合は、最初のコンシューマーにさらに多くのパーティションが割り当てられます。異なるトピックを聞いている消費者には影響しません。この戦略の欠点は何ですか?トピックが 1 つだけの場合、c-1 がさらに 1 つのパーティションを消費しても、大きな影響はありません。トピックが複数ある場合、各トピックに対して、コンシューマー C-1 は 1 つのパーティションをさらに消費します。トピックの数が増えると、消費されるパーティションの数が増え、パフォーマンスが低下します。 [インタビュー質問] 消費者再分配戦略とオフセット維持メカニズムリバランス操作とは何ですか? Kafka はどのようにしてトピックの下にあるすべてのパーティションを各コンシューマーに均等に分散し、メッセージの消費速度を可能な限り速くするのでしょうか?これがバランスです。再バランス調整は、実際にはパーティションを再配分して、パーティションの配分が再びバランスの取れた状態になるようにすることです。下の図に示すように、A と B という 2 つのコンシューマーがあります。3 番目のメンバー C が参加すると、Kafka はリバランスをトリガーします。再分配戦略は、A、B、C を再パーティション化することです。再バランス後の分配は依然として公平であり、各 Consumer インスタンスは 2 つのパーティションの使用権を取得します。 消費者が消費中に突然クラッシュした場合、回復後に消費はどこから始まるのでしょうか?どのような問題が発生するでしょうか? コンシューマーはオフセットを記録し、障害が回復した後、ここから消費を続けます。では、オフセットはどこに記録されるのでしょうか? Zookeeper とローカルに記録されます。新しいバージョンでは、オフセットがデフォルトで _consumer_offsets という名前の Kafka の組み込みトピックに含まれるようになります。デフォルトでは、このトピックには 50 個のパーティションがあり、各パーティションには 3 つのレプリカがあります。パーティションの数は、パラメータ offset.topic.num.partition によって設定されます。 groupid のハッシュ値とこのパラメータの係数は、コンシューマ グループによって消費されるオフセットが保存される _consumer_offsets トピックのパーティションを決定するために使用されます。これは、コンシューマー グループ名 + トピック + パーティションによって決定され、一意のオフセット キーが決定され、対応する値が取得されます。 |
<<: クラウドネットワーク統合における専用回線の需要に関する簡単な分析
>>: リーンでアジャイルなデザインの問題を解決するため、テンセントはデザインをクラウドに移行
[[422849]]企業がパブリック クラウドでワークロードを実行することを計画している場合、適切な...
SEOを行う私たちウェブマスターは、記事を投稿したり、外部リンクを送ったり、ニュースを読んだり、コメ...
月収10万元の起業の夢を実現するミニプログラム起業支援プランドメイン名をどこで購入したか忘れましたか...
速達は生活に欠かせないものとなりました。かつて誰かが、我が国の電子商取引とオンラインショッピングの発...
マイクロブログが普及している時代では、オンラインジョークは宇宙へのロケットよりも速く広がる可能性があ...
世界の金融業界もまた、新たな技術・産業の変化の波を迎えており、クラウドコンピューティング、ビッグデー...
他の出会い系アプリと比較して、MiniDatesはリアルな出会いを促進することに力を入れていますデー...
[コアヒント] 資金調達の成功は、App.Net にとって最初のステップにすぎません。製品の特性上、...
[51CTO.comより引用] 3年ぶりに、成都のTongwei本社で、Tongwei Co., L...
現代人はしばしば奇妙な消費観念を呈する。ダンススカートを買うために6,000元を費やすことをいとわな...
Racknerd の毎年恒例のバレンタインデー イベントが早くも始まり、特に安価な VPS 2 つが...
SEO のプロセスでは、すべての SEO 担当者は必然的に検索エンジン スパイダーのクロール ログを...
Hawkhost は新しいデータセンター、香港を開設しました。現在、世界中に 6 つのデータセンター...
JVM は、JAVA プラットフォームの重要なコンポーネントの 1 つです。非常に多くの知識ポイント...
私は数年間SEOに取り組んでおり、20〜30以上のウェブサイトを最適化してきました。継続的な学習と要...