0

我在Apache Spark作業中使用AWS Java SDK來使用從S3中提取的數據填充DynamoDB表。 Spark工作只使用非常強烈的流(僅用於寫入的三個m3.xlarge節點)並且沒有任何重試策略使用單個PutItem來寫入數據。DynamoDB:什麼時候ProvisionedThroughputExceededException引發

DynamoDB docs state表示AWS SDK有退避策略,但最終如果費率太高可以提高ProvisionedThroughputExceededException。我的火花崗位工作了三天,只受到DynamoDB吞吐量(等於500個單元)的限制,所以我期望速率非常高,隊列非常長,但是我沒有任何異常情況或丟失數據的跡象。

所以,我的問題是 - 當寫入DynamoDB的速度非常高時,可能會發生異常。

+0

您使用的是DynamoDB映射器還是低級API? –

+0

@TofigHasanov我正在使用低級API(雖然不知道其他接口存在!) – chuwy

回答

1

如果您有熱分區,也可以獲得吞吐量異常。由於吞吐量是在分區之間劃分的,因此每個分區的總數都低於總配置吞吐量,因此如果您經常寫入同一分區,即使未使用完全配置的吞吐量,也可以達到限制。

另一件需要考慮的事情是DynamoDB會累積未使用的吞吐量,並在短時間超出限制時使用它來突破短時間內的吞吐量。

+0

我相信這是不太可能的,因爲密鑰(分區和排序)非常均勻分佈(在99.9 %)。儘管如此,我還是很驚訝,因爲這麼長時間沒有得到例外,對於那個龐大的隊伍也是如此 – chuwy

+0

@chuwy您是否檢查DynamoDB的指標?您可以看到在那裏實際使用的寫入吞吐量以及是否有任何錯誤。也許你的實現有一些瓶頸,導致寫入速率相對較低(例如:你是按順序進行同步調用,而不是異步並行調用)。沒有看代碼就說不清。 –

+0

謝謝,@TofigHasanov這已經很有用。事實上,這是少數並行的同步順序請求流,因爲使用Spark的異步放置沒有任何意義。指標中消耗的寫入容量與預配(1000)保持一致。被限制的寫請求總是在400-600的級別上。 – chuwy

相關問題