MQ (メッセージ キュー) は、非同期 RPC として理解できるプロセス間通信の方法の 1 つです。通話結果に対する上流システムの態度は、多くの場合重要ですが、緊急ではありません。メッセージ キューを使用すると、ビジネスの分離、トラフィックのピーク削減、柔軟な拡張などの利点が得られます。次にメッセージミドルウェアKafkaを紹介します。
Kafka とは何ですか? Kafka は分散メッセージング エンジンです。以下の特徴があります
Kafka アーキテクチャの概要 トピック メッセージ トピックとキュー。各メッセージにはトピックがあり、Kafka はメッセージをトピックごとに分類します。 Kafka では、トピックは物理的に 1 つ以上のパーティションに分割できます。各パーティションは物理的に「topicName_partitionIndex」という名前のフォルダーに対応します。このディレクトリには、このパーティションのすべてのメッセージ (.log) とインデックス ファイル (.index) が含まれており、これにより Kafka のスループットを水平方向に拡張できます。 パーティション 各パーティションは連続した不変のメッセージ キューであり、継続的に追加できます。パーティション内のメッセージには、オフセットと呼ばれる、パーティションごとに一意のシーケンス番号が割り当てられます。 メッセージを公開するときに、プロデューサーは各メッセージのキーを指定できます。メッセージがブローカーに送信されると、パーティション分割アルゴリズムに従って対応するパーティションに保存されます (1 つのパーティションに複数のメッセージが格納されます)。パーティション分割ルールが適切に設定されていれば、すべてのメッセージが異なるパーティションに均等に分散され、負荷分散が実現されます。 ブローカ メッセージの保存に使用される Kafka サーバー。 Kafka クラスター内の各サーバーはブローカーであり、コンシューマーはブローカーからサブスクライブされたメッセージをプルします。 プロデューサー Kafka にメッセージを送信すると、プロデューサーはトピックに応じてメッセージを配布します。プロデューサーは、メッセージをトピック上のパーティションに関連付ける責任も負います。最も簡単な方法は、パーティションのリストから順番に選択することです。何らかのアルゴリズムに従って重みに基づいてパーティションを選択することもできます。アルゴリズムは開発者が定義できます。 消費者 Consermer インスタンスは、メッセージのサブスクライブと消費を担当する独立したプロセスになることができます。コンシューマーは、consumerGroup を使用して自分自身を識別します。同じコンシューマー グループは複数のパーティションからのメッセージを同時に消費することができ、同じパーティションを複数のコンシューマー グループが同時に消費することもできますが、コンシューマー グループ内のパーティションは 1 つのコンシューマーのみが消費できます。 顧客グループ コンシューマー グループ: 同じコンシューマー グループ内のコンシューマーの場合、Kafka は対応するトピック内の各メッセージを 1 つのコンシューマーにのみ送信します。 Kafka プロデューサーの設計原則 メッセージを送信するプロセス 1. メッセージをシリアル化し、パーティションを計算する キーと値の構成に従ってメッセージをシリアル化し、パーティションを計算します。 ProducerRecord オブジェクトでパーティションが指定されている場合は、このパーティションが使用されます。それ以外の場合は、キーの係数とトピックのパーティション数を取得します。キーが存在しない場合は、ランダムにカウンターを生成し、このカウンターを使用してパーティション数の係数を取得します。このカウンターは使用されるたびに増加します。 2バッチに送信&送信スレッドを起動 トピックパーティションに応じて対応するバッチを取得します(期限 3.送信者は順番にブローカーにメッセージを送信します(tp repliaリーダー) 3.1 TP Relicaリーダーが所在するブローカーを特定する
3.2 冪等送信 プロデューサーの冪等性を実現するために、Kafka はプロデューサー ID (PID) とシーケンス番号を導入しました。各PIDごとにプロデューサーは各メッセージを送信する
4. 送信者はブローカーから送信されたプロデュース応答を処理する ブローカーが送信者のプロデュース要求を処理すると、送信者にプロデュース応答を送信し、プロデューサーは send() に設定したコールバック関数を実行します。この時点でプロデューサーの送信は完了です。 スループットとレイテンシ:
送信スレッドと長い接続 プロデューサー インスタンスが初期化されるたびに、センダー インスタンスが初期化され、ブローカーに永続的な接続が追加されます。 コードの観点: KafkaProducerが初期化されるたびに、空のクライアントが割り当てられます
端末上の TCP 接続の数を確認します。
消費者デザインの原則 投票メッセージ
移転管理 コンシューマーのメッセージ オフセットは、トピック パーティションの現在のグループの消費の進行状況を表します。コンシューマーがクラッシュして再起動した後も、このオフセットから引き続き消費できます。 Kafka0.8 より前では、オフセット情報は Zookeeper に保存されていました。 Zookeeper は高同時実行の読み取りと書き込みには適していないため、新しいバージョンの Kafka はオフセット情報をメッセージとして扱い、__consumers_offsets トピックが配置されているブローカーに送信します。 __consumers_offsets にはデフォルトで 50 個のパーティションがあります。メッセージのキーは groupId+topic_partition で、値は offset です。 Kafka グループのステータス
リバランス 何らかの理由でコンシューマーのパーティション消費が均一でなくなった場合、Kafka は自動的に再バランスを実行し、コンシューマーのパーティション消費を再び均等にします。 リバランスはいつ発生しますか?
リバランスプロセス 例1: 消費者がクラッシュしたと検出されたことによる再バランス たとえば、ハートビート スレッドがタイムアウト期間内にブローカーにハートビートを送信しない場合、コーディネーターはグループの再バランスをとる必要があると判断します。次に、他のコンシューマーがフェッチ要求を送信すると、コーディネーターは再バランス通知で応答します。コンシューマー メンバーがリクエストを受信すると、リーダーのみが割り当て戦略に従って割り当てを行い、それぞれの割り当て結果をコーディネーターに返します。このとき、コンシューマー リーダーのみが実際のデータを返し、その他は空のデータを返します。割り当て方法を受け取った後、消費者は割り当て戦略を各消費者に同期します。 例2: 消費者の参加による再バランス
(上の写真はインターネットから引用) 拡張: 上記の再バランス調整メカニズムの問題点 大規模なシステムでは、トピックは数百のコンシューマー インスタンスに対応する場合があります。これらの消費者が次々と空の消費者グループに参加すると、複数の再バランスが発生します。さらに、コンシューマー インスタンスの起動時間は制御不能であり、コーディネータによって決定された再バランス タイムアウト (つまり、max.poll.interval.ms) を超える可能性があり、これにより再バランスが再度トリガーされます。再バランスの前に多くの状態を永続化し、再バランス後に再初期化する必要があるため、各再バランスのコストは非常に高くなります。 新バージョンの改善 PreparingRebalance状態への移行を遅らせることで、リバランスの回数を減らす 新しいバージョンでは、group.initial.rebalance.delay.ms パラメータが追加されました。空のコンシューマー グループがメンバー参加リクエストを受信しても、すぐに PreparingRebalance 状態に切り替わって再バランスが開始されるわけではありません。時間が group.initial.rebalance.delay.ms を超えると、グループのステータスが PreparingRebalance (再バランス開始) に変更されます。実装メカニズムは、コーディネーターの最下層に新しいグループ状態 InitialReblance を追加することです。この時点で複数のコンシューマーが次々に起動されると仮定すると、グループの状態は最初に InitialRebalance に変換され、その後、group.initial.rebalance.delay.ms 時間後に PreparingRebalance (再バランスを開始) に変換されます。 ブローカー設計原則 ブローカーは Kafka クラスター内のノードです。プロデューサーによって送信されたメッセージとコンシューマーによる消費要求の処理を担当します。クラスタノードの管理など内容がたくさんあるので、まずは簡単に紹介し、後ほど特別記事でシェアしたいと思います。 ブローカーzk登録 ブローカーメッセージストレージ
ブローカーステータスデータ
ブローカー負荷分散 パーティション量の負荷: 各ブローカーのパーティション数は均一である必要があります。 パーティションのレプリカ割り当てアルゴリズムは次のとおりです。
容量負荷: 各ブローカーが占有するハードディスク容量は均一である必要があります。 Kafka 1.1 より前のバージョンでは、Kafka は各ブローカーのパーティション数が均一であることを保証できましたが、各パーティション内のメッセージ数が異なるため、ハードディスク間でメモリ使用量に大きな違いが生じる可能性がありました。 Kafka1.1では、レプリカのクロスパス移行機能kafka-reassign-partitions.shが追加されました。監視システムと組み合わせることで、自動負荷分散を実現できます。 Kafka の高可用性 Kafkaの高可用性を紹介する前に、いくつかの概念を紹介しましょう。
イスル Kafka は、ISR (パーティション リーダーと同期されたレプリカのリスト) を使用して同期レプリケーションと非同期レプリケーションを組み合わせ、データが失われないようにすることとスループットのバランスをとります。プロデューサーはパーティション リーダーにメッセージを送信するだけで、リーダーはメッセージをローカル ログに書き込みます。フォロワーはリーダーからデータを取得します。メッセージを受信した後、フォロワーはリーダーに ACK を送信します。リーダーが ISR 内のすべてのレプリカから ACK を受信すると、メッセージはコミットされたとみなされ、リーダーは HW を増やしてプロデューサーに ACK を送信します。この方法では、リーダーに障害が発生した場合でも、Isr 内にレプリカが存在する限り、データは失われません。 ISR 動的更新 リーダーは ISR を追跡します。 ISR 内のフォロワーがクラッシュしたり、大幅に遅れたりした場合、リーダーはそれを ISR から削除します。ここで説明する「大幅に遅れる」とは、フォロワーによってコピーされたメッセージの数がリーダーより遅れて、事前設定された値 (replica.lag.max.messages) を超えるか、フォロワーが一定期間 (replica.lag.time.max.ms) リーダーにフェッチ要求を送信できないことを意味します。 Zookeeper のブローカー ノード /brokers/topics/[topic]/partitions/[partition]/state には、トピックパーティションのリーダーやIsrなどの情報が格納されます。 コントローラはブローカーの障害検出とフェイルオーバー(障害/回復)を担当します。
3.1 /brokers/topics/[topic]/partitions/[partition]/stateからパーティションの現在のISRを読み取る 3.2 パーティションの新しいリーダーと Isr を決定します。現在の ISR 内に少なくとも 1 つのレプリカがまだ生きている場合は、そのうちの 1 つが新しいリーダーとして選択され、新しい ISR には現在の ISR 内に生きているレプリカがすべて含まれます。それ以外の場合は、パーティション内の生き残ったレプリカが新しいリーダーおよび ISR として選択されます (このシナリオでは、データが失われる可能性があります) 3.3 Leader、ISR、leader_epoch、controller_epochを更新: /brokers/topics/[topic]/partitions/[partition]/stateに書き込みます。 RPC を介して、set_p に関連するブローカーに LeaderAndISRRequest コマンドを直接送信します。コントローラーは、効率を向上させるために、1 つの RPC 操作で複数のコマンドを送信できます。 コントローラーがクラッシュする 各ブローカーは、Zookeeper の一時ノード「/controller」にウォッチャーを登録します。コントローラーがダウンすると、「/controller」が消え、ブローカーの監視がトリガーされます。各ブローカーは新しいコントローラー パスの作成を試み、そのうち 1 つだけが選出に成功し、コントローラーとして選出されます。 Kafka 使用時に冪等性を確保する方法 メッセージを失わないでください
繰り返しなし コンシューマーはまずメッセージをプルして保存し、コミットが成功した後にキャッシュされたデータを削除します。 Kafka の高パフォーマンス
Kafkaプロデューサーのビジネス最適化
|
<<: 平安科技は包括的なマルチクラウド管理能力を実証し、クラウド・トライポッド賞を受賞した。
>>: クラウド コンピューティングによる混乱を経験している 3 つのホットな市場はどれですか?
SEO 最適化は、検索エンジンと競合他社によって制限されます。注意を払わない限り、特に比較的重みの低...
1. マオプの資産はオークパシフィックの新子会社であるビューティフルレジェンドに移管された6月7日午...
Vultr は米国西海岸のユーザーが多すぎて、全体的な使用効果があまり理想的ではないと感じていません...
最近、ガートナーは、世界のトップクラウドベンダーの全体的なセキュリティ機能を初めて包括的に評価した「...
インタラクション デザイン作業の中核は、情報アーキテクチャとインタラクションの詳細設計にあります。情...
ユーザーフレンドリーな体験は私たちウェブマスターにとって馴染みのないものではなく、ウェブマスターとし...
megalayerは、10月の黄金の連休に向けて、実用的で実用的なプロモーションを提供します。CN2...
昨年、ハイテク産業の給与は10~25%増加し、今年は10%の増加が見込まれている。連休後雇用調査4 ...
v.ps は、イースターシーズン中にヨーロッパの VPS サイクルの 50% 割引プロモーションを開...
モバイル インターネット時代の到来は、スマートフォンの成熟と普及と切り離すことはできません。Kai-...
SEO最適化に関する質問と回答はたくさんあります。以前、 「新しいサイトが含まれないのはなぜか」と「...
検索エンジン最適化(SEO)も CS と同じで、無視できないいくつかの軍事ルールがあります。 1. ...
Diyifanwen.com の最適化に関する記事をいくつか読みましたが、この Web サイトのトラ...
月収10万元の起業の夢を実現するミニプログラム起業支援プランウェブサイトフレンドリーリンクは、中国の...
virmach 香港 VPS: 香港 CMI ネットワークに接続、1Gbps 帯域幅、アップストリー...