AWS Kinesis.PutRecords() 的坑

事情的起因是因?yàn)槲铱吹搅诉@樣一張圖:

Write Throughput Exceeded (Count / Request) — Average


Write Throughput Exceeded (Count / Request) — Average

這張圖一開始我還不怎么重視存谎,因?yàn)樗腨軸數(shù)字才幾十甚至個數(shù)候齿,這對于每小時上千萬的請求量來說最爬,完全不能引起我的注意力啊。

直到后來發(fā)生的一些事崖媚,讓我對幾乎所有系統(tǒng)監(jiān)控都警覺起來痛单。

這張圖的意思,是 Producer 寫入 Kinesis 時超出預(yù)設(shè)容量的部分须误,單位是 個/每次請求挨稿,這個說明什么呢,說明數(shù)據(jù)的寫入太快京痢,超過預(yù)設(shè)容量了奶甘。

但是我算了一下,當(dāng)前 Kinesis 的 Stream祭椰,我是開了 4 個 Shard 的臭家,理論上來說疲陕,它的寫入的吞吐量應(yīng)該是 4 * 1000 = 4000/s,然而钉赁,我們目前每小時的流量才 8,000,000 蹄殃,算下來應(yīng)該是 8,000,000/60/60 = 2222.22/s,遠(yuǎn)小于 Kinesis 的吞吐量最大值你踩,按理來說不應(yīng)該出現(xiàn)超量的情況诅岩。

所以我去研究了一下代碼,這一研究就研究了好幾天带膜,經(jīng)過不斷地測試吩谦,終于發(fā)現(xiàn)問題出在批量寫入后的判斷邏輯上。

原先我們的邏輯是這樣的:

for i := 0; i < maxRetry; i++ {
    _, err = kinesis.PutRecords(input)
    if err == nil {
        return
    }
    time.Sleep(backoff(i))
}

可以看到膝藕,如果出錯的話式廷,我們是會進(jìn)行重新寫入的。但是經(jīng)過我的反復(fù)測試束莫,我發(fā)現(xiàn)其實(shí) WriteProvisionedThroughputExceeded 這個錯誤并不會出現(xiàn)在 err 里面懒棉,而是出現(xiàn)在 PutRecords() 返回的第一個參數(shù)里面。

PutRecords() 會返回一個 output 和 err览绿,其中 output 的定義是:

// PutRecords results.
*type*PutRecordsOutput *struct*{
    _ *struct*{} `type:"structure"`

    // The encryption type used on the records. This parameter can be one of the
    // following values:
    //
    //    * NONE: Do not encrypt the records.
    //
    //    * KMS: Use server-side encryption on the records using a customer-managed
    //    AWS KMS key.
    EncryptionType *string `type:"string" enum:"EncryptionType"`

    // The number of unsuccessfully processed records in a PutRecords request.
    FailedRecordCount *int64 `min:"1" type:"integer"`

    // An array of successfully and unsuccessfully processed record results, correlated
    // with the request by natural ordering. A record that is successfully added
    // to a stream includes SequenceNumber and ShardId in the result. A record that
    // fails to be added to a stream includes ErrorCode and ErrorMessage in the
    // result.
    //
    // Records is a required field
    Records []*PutRecordsResultEntry `min:"1" type:"list" required:"true"`
}

其中策严,F(xiàn)ailedRecordCount 會返回此次寫入失敗的 record 數(shù)量,Records 里面會返回所有 record 的狀態(tài)饿敲。

我們要想判斷是否 WriteProvisionedThroughputExceeded妻导,首先要判斷是否 FailedRecordCount > 0,其次怀各,要遍歷 Records倔韭,檢查是否 Record.ErrorCode != nil ,如果是瓢对,表示該記錄寫入失敗寿酌,需要放回重試隊(duì)列中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硕蛹,一起剝皮案震驚了整個濱河市醇疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌法焰,老刑警劉巖秧荆,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃仪,居然都是意外死亡乙濒,警方通過查閱死者的電腦和手機(jī)详羡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門告喊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回铛,“玉大人征绸,你說我怎么就攤上這事⊥泱” “怎么了廊散?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梧疲。 經(jīng)常有香客問我,道長运准,這世上最難降的妖魔是什么幌氮? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮胁澳,結(jié)果婚禮上该互,老公的妹妹穿的比我還像新娘。我一直安慰自己韭畸,他們只是感情好宇智,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胰丁,像睡著了一般随橘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锦庸,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天机蔗,我揣著相機(jī)與錄音,去河邊找鬼甘萧。 笑死萝嘁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扬卷。 我是一名探鬼主播牙言,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怪得!你這毒婦竟也來了咱枉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤汇恤,失蹤者是張志新(化名)和其女友劉穎庞钢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體因谎,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡基括,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了财岔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片风皿。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡河爹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桐款,到底是詐尸還是另有隱情咸这,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布魔眨,位于F島的核電站媳维,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遏暴。R本人自食惡果不足惜侄刽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朋凉。 院中可真熱鬧州丹,春花似錦、人聲如沸杂彭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亲怠。三九已至所计,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赁炎,已是汗流浹背醉箕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徙垫,地道東北人讥裤。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像姻报,于是被迫代替她去往敵國和親己英。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容