在生產者 - 消費者網絡應用程序中,應該如何爲Kinesis流分片創建分區鍵。 假設我有一個有16個分片的kinesis流,我應該創建多少個分區鍵?它真的取決於碎片的數量嗎?如何確定AWS kinesis流中的分區鍵的總數量?
回答
分區(或哈希)鍵:開始從1到340282366920938463463374607431768211455.比方說〜34020 * 10^34,我會忽略10^34,便於...
如果你有30個碎片,均勻分,每個應該覆蓋1134 * 10^34個散列鍵。覆蓋範圍應該是這樣的。
Shard-00: 0 - 1134 Shard-01: 1135 - 2268 Shard-03: 2269 - 3402 Shard-04: 3403 - 4536 ... Shard-28: 30619 - 31752 Shard-29: 31753 - 32886 Shard-30: 32887 - 34020
如果你有3個消費類應用(聽着這些碎片30),每個人都應該聽10個碎片(最佳平衡)。
這也解釋了流上的合併和拆分操作。
- 要合併2個碎片,它們應該覆蓋相鄰的散列鍵。你不能合併碎片03和碎片29。
- 您可以拆分任何分片。如果你在中間分割shard-00,分配將會是這樣;
Shard-31: 0 - 567 Shard-32: 568 - 1134 Shard-01: 1135 - 2268 Shard-03: 2269 - 3402 Shard-04: 3403 - 4536 ... Shard-28: 30619 - 31752 Shard-29: 31753 - 32886 Shard-30: 32887 - 34020
見,碎片-00將不再接受新的數據。放在具有相同分區鍵範圍(如Shard-00)的Kinesis流中的新記錄將放置在Shard-31或Shard-32下。
在向Kinesis(即生產者端)發送數據時,您不應該擔心「數據到哪個分片」。發送一個隨機數(或uuid或毫秒中的當前時間戳)對於在分片上有效地擴展和分發數據是最好的。除非您擔心單個分片中的記錄排序,否則最好爲put_record請求選擇一個隨機數/不斷變化的分區鍵。
在Java中,您可以使用「putRecordsRequestEntry.setPartitionKey(Long.toString(System.currentTimeMillis()))
」或「putRecordRequest.setPartitionKey(Long.toString(System.currentTimeMillis()))
」作爲示例。
我們遇到** timestamp **的不好的情況。由於分區鍵不能按預期的方式工作,因此當前時間戳差異爲毫秒。因此,我們用** uuid **來改變它。 –
這完全取決於用例。 您需要確保所有相關數據都歸入單個分片,以便您可以根據需要彙總數據。
如果你沒有這個要求使用任何隨機密鑰應該沒問題。
- 1. Kinesis + AWS Lambda:監測流
- 2. 如何從AWS kinesis數據流創建實時報價圖?
- 3. 按負載將AWS Kinesis Firehose數據分區爲s3
- 4. 分區給定的總的分區和分區數的列表
- 5. aws kinesis流以較低的速率向lambda發送數據
- 6. AWS Lambda函數從kinesis流中無限讀取記錄
- 7. 如何將數據寫入Kinesis中的特定分片
- 8. 如何使用Java SDK獲取AWS Kinesis Firehose流詳細信息
- 9. 汽車線kinesis流kinesis firehose?
- 10. Scala中我們如何聚集的陣列,以確定每個鍵的數量和百分比VS總
- 11. 從AWS遷移Kinesis
- 12. 流的分區
- 13. 如何在Cassandra中定義常量分區鍵
- 14. 如何確定選擇器的參數/關鍵字的數量
- 15. 確定當前的AWS區域.Net?
- 16. 無法使用可靠的模塊創建aws kinesis流...!
- 17. 張量流中超參數搜索時的彙總分組?
- 18. 如何訪問AWS中的Kinesis ApproxArrivalTime Lambda表達式
- 19. 使用kinesis流和流水線對流數據進行排序
- 20. documentDB的分區鍵或無分區鍵
- 21. 查詢/過濾kinesis流中的事件
- 22. Kinesis輸入流到Logstash
- 23. 如果AWS Lambda函數具有來自多個Kinesis流的事件源,那麼這批傳入記錄是來自單個Kinesis流還是混合流?
- 24. AWS Kinesis微服務編程
- 25. Kafka喜歡Kinesis Stream上的偏移量?
- 26. Node.js中的代碼AWS Lambda包不會調用putRecord()將數據添加到AWS Kinesis Firehose流
- 27. 虛擬分區鍵總是不好?
- 28. 使用Kinesis SDK訪問DynamoDBStreams流
- 29. ActionScript 2:如何確定關聯數組中沒有迭代的鍵的數量?
- 30. 按分區劃分總計數據的分區
看看這個問題,也許它有幫助; http://stackoverflow.com/a/31377161/1622134 – az3