Kafka レプリカ間のデータ同期を実現するにはどうすればよいですか?

Kafka レプリカ間のデータ同期を実現するにはどうすればよいですか?

みなさんこんにちは、私は仙宇です

最近かなり忙しくて、1週間近く記事を更新していませんでした。もう更新しないと、数少ないファンが離れてしまいますT﹏T

最近たまたまKafkaを勉強していたので、Kafka関連の記事を書くことにしました(記事に間違いがあれば指摘してください)

皆さんの中には Kafka を初めて知る人もいるかもしれないので、Kafka とは何かを簡単に紹介したいと思います。

Kafka の紹介

Kafka は、従来のメッセージ キュー (RaabitMQ、RocketMQ など) のように非同期処理、トラフィック ピークの排除、サービス分離をサポートするだけでなく、高スループットの分散メッセージング システムでもあります。

写真

バッチ処理のためにメッセージをディスクに保存することも可能です。さらに、Kafka は分散システムとして設計されているため、スループットと可用性が大幅に向上します。

Kafka ロール

  • Kafka クライアント

プロデューサー: パブリッシャーとも呼ばれ、メッセージの作成を担当します

コンシューマー: サブスクライバーとも呼ばれ、メッセージの消費(読み取り)を担当します。

  • Kafka サーバー (ブローカー)

  • リーダー: 外部の読み取りおよび書き込みサービスを提供する

  • フォロワー: サービスを提供しませんが、リーダーとデータを同期する責任があります

トピックとパーティション

トピックはメッセージが公開される場所です。コンシューマーはトピックをサブスクライブすることで対応するメッセージを消費します。

スループットを向上させ、トピックの負荷分散を実現するために、Kafka ではトピックの下にパーティションの概念が導入されています。各トピックは複数のパーティションに分割できます。

パーティションを使用すると、メッセージをトピックの下に水平に分割して保存できます。各パーティションは順序付けられた不変のメッセージ キューです。コンシューマーは同じトピックからのメッセージを並行して消費できます。

PS: トピックは論理的な概念であり、メッセージは実際にはパーティションに保存されます。

写真

たとえば、トピックが n 個のパーティションに分割されている場合、トピックの同時実行性は n 増加し、n 人のコンシューマーがトピック内のメッセージを並行して消費できるようになります。

ログ

各トピックごとに、Kafkaはパーティションログを維持します。

写真

各パーティションは、メッセージを継続的に追加できる、順序付けられた不変のメッセージ キューです。メッセージには、オフセットと呼ばれるパーティション内の一意のシーケンス番号が割り当てられます。

オフセットは、パーティション内の各レコードを一意に識別するために使用されます。

Kafka はすべてのパーティションにメッセージを保持し、メッセージを自動的に削除しません。メッセージ保持ポリシーは、Kafka 構成パラメータによって制御されます。メッセージは、一定期間が経過するか、または一定のサイズに達すると期限切れになることがあります。期限切れのメッセージは削除されます。

コンシューマーは、パーティション内の位置を識別するために、Kafka に独自のオフセットのみを保持します。通常、コンシューマーがメッセージを消費すると、そのオフセットは直線的に増加し、これらのメッセージが消費されたことを示します。

コンシューマーは、オフセットを古い値にリセットして、メッセージの読み取りを再開することを選択できます。

各コンシューマー インスタンスは 1 つのパーティションを担当します。 Kafka は、トピック内の異なるパーティションの順序ではなく、パーティション内のレコードの順序を保証するだけです。

Kafka クラスター

Kafka はクラスターの概念を備えた分散アーキテクチャです。

Kafka のインスタンスはブローカーと呼ばれ、プロデューサーからメッセージを受信して​​ディスクに保存します。コンシューマーはブローカーに接続してメッセージを消費します。

複数のブローカーが Kafka クラスターを形成します。クラスター内のブローカーはクラスター コントローラーとなり、ブローカーへのパーティションの割り当て、ブローカーの監視など、Kafka クラスター全体の管理を担当します。

パーティションは複数のレプリカに複製され、異なるブローカーに均等に分散されます。そのうちの 1 つがリーダーで、その他はフォロワーです。

レプリカを作成する単位はトピックパーティションです

通常、各パーティションにはリーダーと 0 個以上のフォロワーが存在します。この方法では、ブローカーに障害が発生しても、他のブローカーのレプリカが引き続きサービスを提供できます。

写真

では、すべてのレプリカを異なるブローカーに均等に分散するにはどうすればよいでしょうか?

レプリカを割り当てるアルゴリズムは次のとおりです。

  • すべてのブローカー(合計でn個のブローカーがあると仮定)と割り当てるパーティションをソートする
  • i番目のパーティションを(i mod n)番目のブローカーに割り当てる
  • i番目のパーティションのj番目のレプリカを((i + j)モードn)番目のブローカーに割り当てる

Kafka はどのようにしてデータ同期を実現するのでしょうか?

まず、KafkaのISR(In-Sync Replicas)メカニズムを見てみましょう。

各リーダーには少なくとも 1 つのフォロワーが存在するため、Kafka によって動的に維持される同期レプリカのセットである ISR が存在します。

ISR 内のすべてのフォロワーはリーダーと同期され、リーダーも ISR リストに含まれます。リーダー選出に参加できるのは、自身の ISR リスト内のレプリカのみです。

プロデューサーがデータを書き込むと、リーダーがデータを更新します。フォロワーは、リーダーがデータを更新し、データを同期したことをどのようにして知るのでしょうか?

フォロワーは、フェッチ要求をリーダーに定期的に送信してデータを同期します。これはフェッチャー スレッドの役割です。

レプリカがフォロワーとして選出されると、レプリカのフェッチャー スレッドが開始されます。フォロワーは、接続を維持するためにリーダーに定期的にハートビート要求を送信し、最新のデータを取得するためにフェッチ要求を送信します。

フォロワーは、自身の LEO (ログ終了オフセット) がリーダーの LEO と異なることを検出した場合、リーダーのデータとの一貫性を確保するために、自身のログをリーダーの対応する位置に同期するためのデータ同期要求をトリガーします。

フォロワーがフェッチ要求を送信しないか、指定された時間内にリーダーのLEOに追いつかない場合(設定フィールドはreplica.lag.time.max.ms)、ISRから削除されます。

最後にまとめます。

  • Kafka におけるトピックは論理的な概念です。各トピックは複数のパーティションに分割でき、パーティションはメッセージを保存するエンティティです。
  • 各パーティションは複数のコピーに複製され、コピーの 1 つがリーダーとして選択され、残りはフォロワーになります。
  • フォロワーは定期的にリーダーにフェッチリクエストを送信し、データの同期を確実にします。
  • リーダーはフォロワーのデータが同期されているかどうかを気にしません。指定された時間内に私にフェッチを依頼しない限り、私はあなたを ISR から外します (積極的であることは悪いことではないことがわかりました)

<<:  GenAI はクラウド コンピューティングの ROI を向上できますか?

>>:  ガートナー: クラウドネイティブテクノロジーを導入してデジタル変革を加速する方法

推薦する

モノリシックからサーバーレスに移行する際の落とし穴を避けるためのガイド

ユーザーの需要とクラウドの開発により、クラウド ネイティブ テクノロジーの台頭、開発、大規模な応用が...

クラウド コンピューティングにおいて人工知能はどのような役割を果たすことができますか?

人工知能の台頭により、誰もがその将来に大きな期待を抱いています。クラウド コンピューティングに関する...

クラウド自動化がサイバーセキュリティの未来にとって重要な理由

多くの組織は、特に自律的な許可とアクセス権と組み合わせることで、サイバーセキュリティの将来を計画する...

情報管理システムをクラウド プラットフォームと SaaS に移行する理由は何ですか?

今日、情報管理市場は根本的な変化を遂げています。顧客関係管理 (CRM) スイートなどのエンタープラ...

raksmart シンガポール CN2 ライン クラウド サーバーの簡単なレビュー

raksmart が提供するシンガポールのクラウド サーバーには、シンガポール CN2、シンガポール...

ASPなどの動的言語サイトでSEOを行う際に注意すべき点

WEB 動的言語には、ASP、PHP、.NET、JSP など、さまざまなものがあります。タイトルで ...

企業が開発したウェブサイトモールのプロモーション方法

一部の企業や個人は、依然としてタオバオやTmallに出店することを好まず、自らモールを開発しています...

あなたの宝物はどこにありますか? インターネット時代のアマチュアリズムとプロフェッショナリズムについての議論

今日の近代商業社会では、プロフェッショナリズムがますます重視されていますが、驚くべきことに、インター...

soladrive: 「マネージド」VPS、年末に50%割引、2Gメモリ/2コア/50g NVMe/2Tトラフィック、米国/英国データセンター

2009 年に事業を開始した老舗の「マネージド」ホスティング会社である Soladrive は、年末...

ビリビリで生配信販売、新作ケーキ?

ビリビリ(略してBステーション)の「破環」計画はライブストリーミング販売にも波及している。最近、ビリ...

新しい Taobao ストアのマーケティング戦略

新規にオープンしたタオバオストアが直面する最大の課題は、トラフィックがない、知名度がない、顧客基盤が...

あなたのウェブサイトが含まれていない、心配ですか? Yunzhi のウェブサイト構築により、1 か月で Baidu のホームページに掲載されるようになります

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...

#日本主机# fastcomet: 2.95ドル/仮想ホスト/KDDI回線/無料ドメイン名

2003 年に設立されたアメリカのホスティング会社である fastcomet.com について、あま...

小馬世徒馬山:どうすれば良い検索広報ができるか?

最近、著者は「オンラインPR:検索PRとは何か」と「検索PRの価値と意義」という2つの記事を通じて、...

1ヶ月半で人気キーワードがホームページの2位に躍り出た

諺にあるように、困難な時代に英雄が現れる。百度のランダムKの時代には、小さなウェブサイトが台頭するチ...