GetRecords.IteratorAgeMilliseconds
CloudWatch指标,以了解消费者是否跟上流。GetRecords.IteratorAgeMilliseconds
86400000(==保留期)我已经为过时的分片确定了shardIds。其中一个是shardId-000000000518
,我可以在DynamoDB表中看到以下检查点信息:
leaseKey: shardId-000000000518
checkpoint: 49578988488125109498392734939028905131283484648820187234
checkpointSubSequenceNumber: 0
leaseCounter: 11058
leaseOwner: 10.0.165.44:52af1b14-3ed0-4b04-90b1-94e4d178ed6e
ownerSwitchesSinceCheckpoint: 37
parentShardId: { "shardId-000000000269" }
我可以在10.0.165.44上的worker日志中看到以下内容:
17/11/22 01:04:14 INFO Worker:当前流碎片分配:shardId-000000000339,...,shardId-000000000280, shardId-000000000518
...这应该意味着 shardId-000000000518 已分配给此工作人员。但是,我从未在日志中看到此shardId的任何其他内容。如果工作者没有从这个shardId消费(但它应该),这可以解释为什么GetRecords.IteratorAgeMilliseconds
永远不会减少。对于其他一些(非过时的shardIds ),我可以在日志中看到
17/11/22 01:31:28 INFO SequenceNumberValidator:验证序列号49578988151227751784190049362310810844771023726275728690,分片ID为shardId-00000000033
我确实通过查看IncomingRecords CloudWatch指标验证过时的分片是否有数据流入其中。
我该如何调试/解决此问题?为什么这些shardId永远不会被Spark工作者接收?