カフカは、データの信頼性と一貫性を確保する方法です
学生はすべて知っている必要がありますあまりにも多くのデータを学ぶ カフカが住んでいた分散型のメッセージ・サブスクリプション方式である、非常に良い横スケーラビリティ、リアルタイムの店舗データの膨大な量があり、ストリームデータ処理は、デファクトスタンダードのミドルウェアです。この記事では説明 カフカの データの信頼性と一貫性を確保する方法。
記事のディレクトリ
データの信頼性
カフカ ビジネスクラスのメッセージングミドルウェアとして、重要性のメッセージの信頼性を想像することができます。いくつかのデータのビューのProducter、トピックリーダー選挙のパーティションの複製と信頼ポイントを本明細書でブローカからメッセージを送信します。
トピックパーティションのレプリカ
カフカ0.8.0前に、カフカは、コピーの概念がなく、データのないコピーが存在しないため、その後の人々はちょうど、カフカによって保存されたいくつかの重要なデータを与えることは失われる可能性が高いです。あなたのビジネスが成長し、より多くの強烈なサポートコピー機能としてではなく、データの信頼性を確保するためにので、カフカは0.8.0パーティションのレプリカ(詳細については、参照からのバージョンを導入し始めた KAFKA-50)。各パーティションは、人工的に(例えば、テーマ指定時間の作成などのいくつかのコピーを設定することができること replication-factor
、また、ブローカレベルで設定することができる default.replication.factor
)、通常は3に設定されます。
カフカは、イベントに単一のパーティションが発注されることを保証するオンラインゾーニング(利用可能)およびオフライン(使用できない)ことができます。リーダーのコピーとなっている多くのパーティションのコピーの中で、コピーの残りの部分は、フォロワーが定期的に指導者にデータをコピーする一方、すべての読み取りおよび書き込み操作は、リーダーを介して実行され、フォロワーです。リーダーがハングアップすると1人のフォロワーは再び新しいリーダーになるだろうとき。コピーを分割することにより、データの冗長性を導入するだけでなく、データの信頼性カフカを提供しています。
カフカのパーティションのマルチコアアーキテクチャは、メッセージがまだ永続メッセージを保証することができますクラッシュ時にカフカの複数のコピーを作成するために書かれ、カフカの信頼性保証のコピーです。
プロデューサーブローカーにメッセージを送信
我々はカフカ対応するテーマにメッセージを送信したい場合は、我々はプロデューサーで完了する必要があります。以前の私たちは、カフカのテーマについて語った次のターンのそれぞれが複数のコピーに対応し、複数のパーティションに対応し、ユーザーはデータの信頼性を設定することを可能にするために、カフカは、内部のメッセージ確認機構プロデューサーを提供します。私たちは、対応するパーティションの複数のコピーにメッセージを送信することを決定することができるという設定の成功によって送信されたメッセージと考えられています。プロデューサーによって定義された場合は acks
仕様(バージョン0.8.2.Xパラメータの前に request.required.acks
パラメータの設定を参照してください KAFKA-3043を)。このパラメータには次の3つの値をサポートしています。
- = 0のACK:生産者がネットワーク経由でメッセージを送信できる場合は、そのメッセージが正常にカフカに書き込まれたことを意味します。この場合、エラーはまだ、このようなオブジェクトをシリアル化することができるか、または非NICに障害が発生し、それはパーティションまたは長時間クラスタ全体がオフラインである場合、それはエラーを受信しないであろう利用可能でない送信として、起こり得ます。ACKでの速度= 0モードは、(多くのベンチマークは、このモデルに基づいている理由である)非常に高速です、あなたは驚くほどのスループットと帯域幅の使用率を得ることができますが、このモードが選択されている場合は、失われますいくつかのメッセージ。
- ACK = 1:メッセージとは(必ずしもディスクに同期していない)ファイルパーティションデータに書き込みエラー応答または肯定応答が返された場合にリーダーが受信することを意味します。通常のリーダーの選挙が行われた場合プロデューサーが適切にエラーを処理できる場合は、このモードでは、生産者がLeaderNotAvailableException例外の選挙で届きます、それは静かな関心の送信を再試行し、最終的にメッセージは、新しいリーダーに無事到着しますそこに。しかし、そこにメッセージが正常にリーダーに書き込まれているようなデータ、このモードの損失の可能性はまだありますが、メッセージはコピーフォロワーリーダーのクラッシュにコピーされる前に。
- ACK =すべて(意味とrequest.required.acks = -1と同じ):リーダーは、エラー応答または肯定応答を返す前に意味は、すべてのすべての同期コピーは静かな情報を受信するまで待機します。場合と
min.insync.replicas
一緒にパラメータを、あなたは少なくとも静かな情報を受け取ることができるがありますどのように多くのコピーを確認するために返す前に決めることができ、生産者は、メッセージが正常に送信されるまで再試行する必要があります。生産者はすべてのコピーが現在のメッセージの受信を待機する必要がある前に、他のメッセージを送信し続けるようしかし、これは、最も遅いアプローチです。
実際のアプリケーション・シナリオによると、私たちはさまざまなセットアップ acks
データの信頼性を確保するために、。
さらに、プロデューサ送信メッセージは、(によって、デフォルトを同期することを選択することができる producer.type=sync
構成)または非同期(producer.type=async
)モード。それが大幅メッセージングのパフォーマンスを向上させますが、非同期に設定するが、これは、データを失うリスクを増大させた場合。あなたがメッセージの信頼性を確保する必要がある場合にしなければならない producer.type
同期に設定。
リーダー選挙
リーダー選挙を導入する前に、のは、ISR(イン・シンクのレプリカ)のリストを見てみましょう。各パーティションのリーダーがBorkerのコピーを、番号フォロワーがいるISR、ISRリストのリストを維持し、唯一のコピーがISRに追加することができフォロワーのリーダーに追いつくために、これはによって達成された replica.lag.time.max.ms
設定パラメータ、参照がなされ得る 「理解カフカの記事レプリケーションメカニズムのコピー」。唯一のISRのメンバーは、可能なリーダーとして選択されています。
だから、リーダーがハングアップ、そして時に unclean.leader.election.enable=false
このパーティションは、最新のニュースでコミットされているので、の場合には、カフカは、新しいリーダーとしてISRリストから最初のフォロワーを選択します。これはすでにコミットメッセージにより、データの信頼性を確保することができます。
要約すると、データの信頼性を確保するために、我々はそれを設定するには、少なくともいくつかのパラメータが必要になります。
- レベルプロデューサー:ACKを=すべての(またはrequest.required.acks = -1)、同時同期モードproducer.type =同期
- トピックレベル:replication.factor> = 3、及びmin.insync.replicas> = 2を設定します。
- ブローカーグレード:不完全なリーダー近い選挙、そのunclean.leader.election.enable = falseは、
データの一貫性
ここで提示されたデータの一貫性リーダー主なポイントは、それが選挙の新旧リーダーであるかどうか、消費者が同じデータを読み取ることができるということです。だから、カフカは、それを達成する方法ですか?
:あなたは記事のスパーク、HadoopのHBaseのかに関連する、マイクロチャネル公衆番号への歓迎の注意に遅れないようにしたい場合はiteblog_hadoop
0は、リーダーのコピーであり、レプリカフォロア2のコピー、およびISRの中にリストパーティション3のコピー仮定する。コピーは0 Message4を書かれているが、しかし、唯一の消費者メッセージ2をお読みください。ISRメッセージ2の全てが同期しているので、メッセージ上でのみハイウォーターマークは、消費者のサポートを読まれた図に対応し、最小およびパーティション内のオフセットハイウォーターマークISRリストに依存します。2つのコピーを、これは非常によく似ていますバレル理論。
この理由は、リーダーがクラッシュした場合、別のコピーは、これらのメッセージが失われる可能性が高い、新しいリーダーになるために、まだメッセージのコピーが「安全でない」と見なされるコピーには十分ではありません。我々は消費者が読むことを許可した場合、これらのメッセージは、一貫性を損なう可能性があります。想像して、消費者が現在のリーダー(コピー0)から読み込み、Message4を処理し、この時間のリーダーは新しいリーダー1のために、選挙のコピーをハングアップ、他の消費者に行くには、この時間は、新しいリーダーからのメッセージを読み取り私は、データの矛盾につながる、このニュースは実際には存在しないました。
(私たちは最初のレプリケーションメッセージの完了を待つことになるので)もちろん、ハイウォーターマークメカニズムの導入は、何らかの理由で遅いBrokerの間でメッセージをコピーするためにつながる、また、消費者の時間に達するとメッセージが長くなります。パラメータできる遅延時間 replica.lag.time.max.ms
の最大メッセージのコピーを指定する構成パラメータは、遅延時間のコピー中に許可されてもよいです。