カフカノート - 信頼性、消費電力およびその他の事項と
非常にこれらの日忙しいが、私はとてもこのノートの前菜を取得しません、私の要件は記事に少なくとも1週間与え、ソースコード解析は、次の2日間は、書くことができるはずです推定しています。 - 誰が見ていなくても、自分の燃料を与えます。
信頼性#
メッセージが失われないようにする方法#を
カフカは、メッセージ永続性保証の限られた程度を行うには(コミットメッセージを)「送信します」。
メッセージが送信された
いくつかのブローカーが正常にメッセージを受信したときカフカ後、ログファイルに書き込まれ、彼らは、このメッセージが正常に送信されてきたプロデューサープログラムを教えてくれます。
ことを確実にする持続性の限られた程度
メッセージがNカフカブローカに記憶されている場合は、次に、少なくともNブローカは、メッセージが失われないことを保証するために、少なくとも一つで生存しました。
データケースの損失#
番組制作は、データを失う#
カフカプロデューサーが非同期的に送信されるため、エンドコールproducer.send(MSG)は、そのメッセージが正常に送信されてきたとは思いません。
だから、プロデューサーは常にproducer.send(MSG、コールバック)を使用して、コールバックで通知を送信するためにAPIを使用しています。メッセージ提出障害状況が発生すると、プロセスは、標的とすることができます。
消費者は、データ損失の終了#を
消費者は、オフセットを更新することである、そして、メッセージを消費します。今回の消費者が突然ダウンした場合、そのメッセージは失われます。
私たちは、最初のメッセージを消費して、オフセット位置を更新する必要がありますので。しかし、これはメッセージの繰り返し消費の原因になります。
別のケースでは、非同期メッセージを処理するために開いている複数のスレッドにメッセージを取得するための消費者であり、消費者は自動的に更新され、前方にオフセット。実行これらのスレッドの1つが故障した場合、メッセージは失われます。
このような状況に遭遇し、消費者は、変位を提出し、自動的に開きませんが、アプリケーションの手動シフトを提出します。
ベスト達成#
- 使用producer.send(MSG、コールバック)。
- 提供のACK =すべて。ACKのブローカがメッセージを受信したすべてのコピーを表すパラメータプロデューサー、で、メッセージは「提出」と考えられます。
- 再試行は大きな値に設定します。プロデューサーは、パラメータ、対応するプロデューサー自動再試行です。ネットワークジッタが発生した場合には、自動的にメッセージの損失を避けるために、メッセージの送信を再試行することができます。
- unclean.leader.election.enable =偽。その資格の選挙リーダーパーティションブローカコントロール。ブローカーは、あまりにも多くのキャンペーンのリーダーの後ろに落ちることは許されません。
- 提供replication.factor> = 3。Brokerのパラメータ、冗長ブローカー。
- 提供min.insync.replicas> 1。Brokerのパラメーター。制御メッセージは、コピーの数を考慮し、少なくともに書き込まれる「提出します。」
- replication.factor> min.insync.replicasを確認してください。2が等しい場合には、限り、フックのコピーがあるとして、パーティション全体が正常に動作することはできません。推奨配置さreplication.factor = min.insync.replicas + 1。
- そのメッセージの消費量、完全な服従を確認してください。消費者エンドパラメータenbale.auto.commit、falseに設定し、手動提出変位。
第二の説明条VI:
それはmin.insync.replicas目的の導入に相当し、ACKを=すべてのACK = 1のISR一つのコピーのみでは限界の下限を作ることである場合:あなたは自己満足することはできませんすべてのISRのライトが、また、書き込みISRの数が少ないmin.insync.replicas以上であることを確実にします。
冪等性の#
0.11.0.0バージョンの紹介では冪等生産関数を作成します。セットprops.put( "enable.idempotence"、真)、またはprops.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG、真)する必要がある唯一の。
enable.idempotence後冪等プロデューサーに真、プロデューサー自動アップグレードを提供します。カフカは自動的に重いが移動します。ブローカーは、より多くのいくつかのフィールドが保存されます。同じメッセージがプロデューサーフィールド値によって送信された場合、これらのメッセージの自動認識してブローカーが繰り返されました。
範囲:
- 冪等では唯一の重複メッセージがトピック上のパーティションに表示されないことを確実にするために単一のパーティション、冪等プロデューサーに保証することができます。
- 冪等は、ここでしか単一回答セッションで達成することができ、最初の実行プロデューサーのプロセスを意味します。再起動プロセスプロデューサーの後、冪等を保証するものではありません。
トランザクション#
カフカは、コミット読取りトランザクション分離レベルを提供し、取引のサポートを提供し、バージョン0.11に始まりました。アトミック対象のパーティションに書き込まれている複数のメッセージを確実にするために、だけでなく、消費生活だけで正常に送信されたメッセージを見ることができることを保証します。
トランザクションプロデューサー#
複数のメッセージがアトミックに複数のパーティションに書き込まれていることを確認します。これらのメッセージは、いずれかのすべての成功、またはすべて失敗します。プロデューサーも恐れトランザクションプロセスが再開しました。
プロデューサー側の設定:
- オープン
enable.idempotence = true
- プロデューサーパラメータ設定終了
transactional.id
また、初期化の問題に対処するために、それぞれ、このようなinitTransaction、のbeginTransaction、のcommitTransactionとabortTransactionとして、トランザクション・コールプラスAPI、、、、トランザクションは、トランザクションをコミットし、開始し、トランザクションが終了されます。
次のとおりです。
producer.initTransactions();
try {
producer.beginTransaction();
producer.send(record1);
producer.send(record2);
producer.commitTransaction();
} catch (KafkaException e) {
producer.abortTransaction();
}
このコードは、どちらかのすべての成功または書き込み障害、RECORD1とRECORD2はカフカに提出トランザクションと同じであることを保証することができます。
消費者側の設定:
isolation.levelパラメータを設定し、二つの値があります。
- READ_UNCOMMITTED:トランザクションをコミットするか、トランザクションを終了するか、デフォルト値は、消費者側トランザクションプロデューサーを示し、そのメッセージを読み取ることが書かれています。
- READ_COMMITTED:消費者ショーだけ書かトランザクションプロデューサー成功提出メッセージトランザクションを読み込みます。プロデューサー書かれたすべての非トランザクションメッセージを見ることができることに注意してください。
非常にこれらの日忙しいが、私はとてもこのノートの前菜を取得しません、私の要件は記事に少なくとも1週間与え、ソースコード解析は、次の2日間は、書くことができるはずです推定しています。 - 誰が見ていなくても、自分の燃料を与えます。
信頼性#
メッセージが失われないようにする方法#を
カフカは、メッセージ永続性保証の限られた程度を行うには(コミットメッセージを)「送信します」。
メッセージが送信された
いくつかのブローカーが正常にメッセージを受信したときカフカ後、ログファイルに書き込まれ、彼らは、このメッセージが正常に送信されてきたプロデューサープログラムを教えてくれます。
ことを確実にする持続性の限られた程度
メッセージがNカフカブローカに記憶されている場合は、次に、少なくともNブローカは、メッセージが失われないことを保証するために、少なくとも一つで生存しました。
データケースの損失#
番組制作は、データを失う#
カフカプロデューサーが非同期的に送信されるため、エンドコールproducer.send(MSG)は、そのメッセージが正常に送信されてきたとは思いません。
だから、プロデューサーは常にproducer.send(MSG、コールバック)を使用して、コールバックで通知を送信するためにAPIを使用しています。メッセージ提出障害状況が発生すると、プロセスは、標的とすることができます。
消費者は、データ損失の終了#を
消費者は、オフセットを更新することである、そして、メッセージを消費します。今回の消費者が突然ダウンした場合、そのメッセージは失われます。
私たちは、最初のメッセージを消費して、オフセット位置を更新する必要がありますので。しかし、これはメッセージの繰り返し消費の原因になります。
別のケースでは、非同期メッセージを処理するために開いている複数のスレッドにメッセージを取得するための消費者であり、消費者は自動的に更新され、前方にオフセット。実行これらのスレッドの1つが故障した場合、メッセージは失われます。
このような状況に遭遇し、消費者は、変位を提出し、自動的に開きませんが、アプリケーションの手動シフトを提出します。
ベスト達成#
- 使用producer.send(MSG、コールバック)。
- 提供のACK =すべて。ACKのブローカがメッセージを受信したすべてのコピーを表すパラメータプロデューサー、で、メッセージは「提出」と考えられます。
- 再試行は大きな値に設定します。プロデューサーは、パラメータ、対応するプロデューサー自動再試行です。ネットワークジッタが発生した場合には、自動的にメッセージの損失を避けるために、メッセージの送信を再試行することができます。
- unclean.leader.election.enable =偽。その資格の選挙リーダーパーティションブローカコントロール。ブローカーは、あまりにも多くのキャンペーンのリーダーの後ろに落ちることは許されません。
- 提供replication.factor> = 3。Brokerのパラメータ、冗長ブローカー。
- 提供min.insync.replicas> 1。Brokerのパラメーター。制御メッセージは、コピーの数を考慮し、少なくともに書き込まれる「提出します。」
- replication.factor> min.insync.replicasを確認してください。2が等しい場合には、限り、フックのコピーがあるとして、パーティション全体が正常に動作することはできません。推奨配置さreplication.factor = min.insync.replicas + 1。
- そのメッセージの消費量、完全な服従を確認してください。消費者エンドパラメータenbale.auto.commit、falseに設定し、手動提出変位。
第二の説明条VI:
それはmin.insync.replicas目的の導入に相当し、ACKを=すべてのACK = 1のISR一つのコピーのみでは限界の下限を作ることである場合:あなたは自己満足することはできませんすべてのISRのライトが、また、書き込みISRの数が少ないmin.insync.replicas以上であることを確実にします。
冪等性の#
0.11.0.0バージョンの紹介では冪等生産関数を作成します。セットprops.put( "enable.idempotence"、真)、またはprops.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG、真)する必要がある唯一の。
enable.idempotence後冪等プロデューサーに真、プロデューサー自動アップグレードを提供します。カフカは自動的に重いが移動します。ブローカーは、より多くのいくつかのフィールドが保存されます。同じメッセージがプロデューサーフィールド値によって送信された場合、これらのメッセージの自動認識してブローカーが繰り返されました。
範囲:
- 冪等では唯一の重複メッセージがトピック上のパーティションに表示されないことを確実にするために単一のパーティション、冪等プロデューサーに保証することができます。
- 冪等は、ここでしか単一回答セッションで達成することができ、最初の実行プロデューサーのプロセスを意味します。再起動プロセスプロデューサーの後、冪等を保証するものではありません。
トランザクション#
カフカは、コミット読取りトランザクション分離レベルを提供し、取引のサポートを提供し、バージョン0.11に始まりました。アトミック対象のパーティションに書き込まれている複数のメッセージを確実にするために、だけでなく、消費生活だけで正常に送信されたメッセージを見ることができることを保証します。
トランザクションプロデューサー#
複数のメッセージがアトミックに複数のパーティションに書き込まれていることを確認します。これらのメッセージは、いずれかのすべての成功、またはすべて失敗します。プロデューサーも恐れトランザクションプロセスが再開しました。
プロデューサー側の設定:
- オープン
enable.idempotence = true
- プロデューサーパラメータ設定終了
transactional.id
また、初期化の問題に対処するために、それぞれ、このようなinitTransaction、のbeginTransaction、のcommitTransactionとabortTransactionとして、トランザクション・コールプラスAPI、、、、トランザクションは、トランザクションをコミットし、開始し、トランザクションが終了されます。
次のとおりです。
producer.initTransactions();
try {
producer.beginTransaction();
producer.send(record1);
producer.send(record2);
producer.commitTransaction();
} catch (KafkaException e) {
producer.abortTransaction();
}
このコードは、どちらかのすべての成功または書き込み障害、RECORD1とRECORD2はカフカに提出トランザクションと同じであることを保証することができます。
消費者側の設定:
isolation.levelパラメータを設定し、二つの値があります。
- READ_UNCOMMITTED:トランザクションをコミットするか、トランザクションを終了するか、デフォルト値は、消費者側トランザクションプロデューサーを示し、そのメッセージを読み取ることが書かれています。
- READ_COMMITTED:消費者ショーだけ書かトランザクションプロデューサー成功提出メッセージトランザクションを読み込みます。プロデューサー書かれたすべての非トランザクションメッセージを見ることができることに注意してください。