在生产者 - 消费者网络应用程序中,应该如何为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. 如何扇出AWS kinesis流?
- 2. AWS的Kinesis流,创建流错误
- 3. 围绕着aws kinesis流
- 4. Kinesis + AWS Lambda:监测流
- 5. 按负载将AWS Kinesis Firehose数据分区为s3
- 6. 预先确定RDD分区的数量
- 7. 如何确定AWS Lambda函数中的当前区域?
- 8. DynamoDB到Kinesis流
- 9. 使用node.js消耗AWS Kinesis流
- 10. 分区给定的总的分区和分区数的列表
- 11. aws kinesis流以较低的速率向lambda发送数据
- 12. AWS Lambda函数从kinesis流中无限读取记录
- 13. 如何将数据写入Kinesis中的特定分片
- 14. 如何使用Java SDK获取AWS Kinesis Firehose流详细信息
- 15. 汽车线kinesis流kinesis firehose?
- 16. 如何区分相对于张量流中的输入变量
- 17. AWS Kinesis leaseOwner混淆
- 18. 从AWS迁移Kinesis
- 19. Scala中我们如何聚集的阵列,以确定每个键的数量和百分比VS总
- 20. AWS Kinesis写入吞吐量没有数据,但有总数传入请求中的数据
- 21. 从过去的AWS Kinesis中读取
- 22. 流的分区
- 23. 如何在Cassandra中定义常量分区键
- 24. 无法使用可靠的模块创建aws kinesis流...!
- 25. 如何确定选择器的参数/关键字的数量
- 26. 如何访问AWS中的Kinesis ApproxArrivalTime Lambda表达式
- 27. 张量流中超参数搜索时的汇总分组?
- 28. 使用kinesis流和流水线对流数据进行排序
- 29. Kinesis输入流到Logstash
- 30. 查询/过滤kinesis流中的事件
看看这个问题,也许它有帮助; http://stackoverflow.com/a/31377161/1622134 – az3