2016-04-25 11 views
0

Kinesisストリームにデータを書き込むときにProvisionedThroughputExceededException問題が発生しました。Kinesis ProvisionedThroughputExceededException十分なシャードの後でも

ケース1: 我々が使用された単一m4.4xlarge(16コア、64ギガバイトMEM)ストリームパス上のJMeterから3Kの要求を、データを書き込むためのインスタンスは、EC2インスタンスは私たちに、毎秒1100要求を提供し、だから我々は2シャードを選びますストリーム(すなわち、2000eps)。 結果的にストリームにデータを書き込むことができました。

ケース2:我々は10 EC2のm4.4xlarge(16コア、64ギガバイトのMEM)クラスタと(一方のシャードのための単純な計算1000epsに基づいて、それほど10シャード+ 1規定)11シャード・ストリームを作成したさらなる試験のため 。 Jmeterからのリクエストケースが異なるEC2クラスターを3,10,30百万といったようにテストします。ログファイルにProvisionedThroughputExceededExceptionエラーが発生しました。

Jmeter側EC2クラスターは7500epsを提供しています。私は7500epsストリームで11000epsの容量を持つとこのようなエラーは返さないと考えています。

この問題の背後にある理由を理解できたら助かりますか?

答えて

0

プロデューサー側を確認して、別のシャードにデータを挿入してもよろしいですか? PutRecordRequestコールの "PartitionKey"の値が役立ちます。

0

キネシスがあなたのデータをハッシュしない/分散させないように聞こえます - 一部は「熱い」(ProvisionedThroughputExceededException)、他は「寒い」です。この問題を解決するには

は、私が

  1. は、あなたのデータは、に行く破片その上にコントロールを持つためにExplicitHashKeyパラメータを使用してお勧めします。 PutRecords documentationにはこれに関するいくつかの基本的な情報があります(それほど必要ではありません)。
  2. また、シャードがハッシュスペース(適切な開始/終了ハッシュキー)に均等に分割されていることを確認してください。

最も簡単なパターンは、各シャードごとに1つの事前定義されたExplicitHashKeyを持つだけで、PutRecordsロジックが各レコードに対して完全に均等に分布するようにすることです。いずれにしても、レコードハッシュアルゴリズムがレコードをシャード間で均等に配布するようにしてください。

ExplicitHashKeyを使用することに基づくもう1つの代替/拡張機能は、「オーバーフロー」シャード専用のハッシュスペースのサブセットを持たせることです - あなたのケースでは、特定のExplicitHashKey値を1つのシャードにマッピングします。通常の破片は、再試行のためにそこに記録を送る。

関連する問題