Kinesis Data Streams shard hot key skewed partition
| Service | Amazon Kinesis |
|---|---|
| Cloud | Amazon Web Services (AWS) |
| Guide type | Procedure |
| Skill level | Intermediate to advanced |
| Time | 15 - 60 minutes depending on account size |
If you hit Kinesis Data Streams shard hot key skewed partition on Amazon Kinesis in production, the steps below are the path most teams take in 2026. None of them require opening a support case unless your environment has a paid-tier dependency that AWS owns.
What kinesis data streams shard hot key skewed partition actually involves on Amazon Kinesis
This task on Amazon Kinesis is one of the more searched operational topics on AWS in the last 12 months. The procedure below is the path that works in a current AWS account with default IAM and standard VPC config.
The rest of this page is the structured fix path. Start with diagnose, then remediation, then the automation options so you do not have to do this by hand the next time it surfaces. Verify and safety sections at the end are the discipline that keeps the fix from regressing in production.
Signal review
Start by capturing the exact AWS error string. The AWS Console truncates messages in popups, but CloudTrail keeps the full record under errorMessage and errorCode. The camelCase error code (e.g. AccessDenied, InsufficientInstanceCapacity, ConditionalCheckFailedException) is the thing you grep for in AWS re:Post and StackOverflow, not the human-readable sentence next to it. Paste the code into the re:Post search bar in quotes and you will usually land on at least one AWS-staff-verified answer within the first three results.
Diff against last known good. The last config change you made is the cause about three quarters of the time, even when the change should not have mattered. Use AWS Config history (or your Terraform / CloudFormation drift report) to see the actual delta between the resource state when it worked and when it broke. The change you remember is often not the only change that happened.
Run aws sts get-caller-identity first. About one in five 'why does this not work' tickets are actually 'I am in the wrong account' or 'my session expired and the SDK is using stale creds'. The 5-second sanity check costs nothing and saves real time when the answer is that simple.
Solution-focused remediation path
If you cannot reproduce the failure consistently, the cause is probably a race condition or a session-cache issue. Run the call with --profile set to a fresh STS session, in a different region you control, with a single concurrent request. If it works there but fails in your normal setup, the difference is the bug.
Most Amazon Kinesis failures fall into one of three buckets: IAM permission gap, networking path break (security group, NACL, or VPC endpoint policy), or service-limit / quota hit. Run that mental triage first - it covers around 80 percent of real-world cases. If the failure does not fit any of the three, it is likely a service-side regression worth opening a re:Post or support ticket for.
If networking is suspect, use VPC Reachability Analyzer. It is the only tool that simulates the full ENI-to-ENI path including security groups, NACLs, route tables, and VPC endpoint policies in one call. Manual trace is slower and misses transitive issues. The analyzer charges $0.10 per analysis - cheaper than a 30-minute call with your network team.
Automate this fix so you do not do it twice
Add a Systems Manager Automation runbook
For multi-step fixes that include a manual approval, use SSM Automation. Document the fix as a runbook with aws:approve steps where a human signs off and aws:executeAwsApi steps where the runbook calls the AWS API. Approvers are notified by SNS; the runbook execution shows up in CloudTrail with the approver's identity attached. This makes audit trails easy and stops production fixes from being one-person operations.
Add a CloudWatch alarm so you know next time
The cheapest way to never see the same incident twice is a CloudWatch alarm on the metric that would have warned you. For Amazon Kinesis, the relevant metrics live under AWS/kinesis namespace or under custom metrics published by your Lambda or ECS task. Set thresholds based on observed normal range plus one or two standard deviations, not on round-number guesses. CloudWatch anomaly-detection alarms remove the threshold-guessing problem entirely for metrics with regular seasonality.
Automate the fix with the AWS CLI
The CLI one-liner pattern for Amazon Kinesis operations is roughly: aws kinesis describe-... --query ... to read state, aws kinesis modify-... --no-dry-run to apply the change, and aws kinesis describe-... --query ... again to verify. Wrap it in a shell script that sets a region variable at the top and exits on first error with set -euo pipefail so a partial run does not leave the account in a half-fixed state.
# Template - replace placeholders with your account specifics
export AWS_REGION=us-east-1
export AWS_PROFILE=prod
aws kinesis describe-... --query 'Resources[?Status==`FAILED`].[Id,Reason]' --output table
aws kinesis modify-... --resource-id RESOURCE_ID --no-dry-run
aws kinesis describe-... --resource-id RESOURCE_ID --query 'Status'
Things that bite
The pitfall most teams hit on Amazon Kinesis is moving too fast and skipping the read-only validation step. Before any write, list the current state and save it. AWS APIs are eventually consistent for many resource types, so the validation snapshot is your only reliable reference if you need to undo. Save the output of the describe call to S3, not to your laptop.
Second pitfall: confusing IAM permission errors with networking errors. AccessDenied can be IAM (policy missing), networking (VPC endpoint policy blocking the call), or KMS (key policy missing). The error string looks identical for all three. Distinguish by looking at the CloudTrail event's errorCode and the encoded authorization message; do not assume IAM is the culprit just because the message says AccessDenied.
Repair sequence
- Reproduce the original symptom path. If it still surfaces in any account or region or IAM role, you have not fixed it.
- Watch for 24 to 48 hours. AWS metrics and policy systems can mask issues with cached health for 6 to 12 hours, especially CloudFront and Route 53.
- Run a smoke test under realistic load. Happy-path tests miss race conditions and IAM session-cache issues.
- Capture the new state in a runbook so the next person on call does not have to rediscover this. Push it to Confluence or your team wiki, not into Slack.
- If the fix involved a permission change, run IAM Access Analyzer one more time to confirm you did not open a separate hole while closing this one.
Safety, rollback, blast radius
- Test in a non-production account if your environment has Control Tower or AWS Organizations. The cost of one sandbox account is cheaper than one rollback meeting.
- Export the existing config before changing it. Most Amazon Kinesis resources support describe + export to JSON via CLI - capture that to source control before you start.
- Know your rollback path. Some Amazon Kinesis operations are one-way (region migration, account-level feature opt-in, KMS key deletion past pending window). Confirm reversibility on the AWS doc before you commit.
- Be aware of cross-service impact. IAM role changes ripple to every service trusting that role. KMS key changes break every workload depending on that key. VPC endpoint changes affect every VPC consumer of that endpoint.
- Maintenance window discipline: if the change touches DNS, certificate rotation, or anything that emits TLS handshakes, line up a window with stakeholder notification, not a heroic mid-day swap.
FAQ
aws kinesis describe-... first, then commit it before you change anything. A few operations are one-way (KMS key deletion past the pending window, region migration, account closure). Check the AWS doc for the specific API before you commit.aws CLI or SDK calls - those almost always still work.References
- docs.aws.amazon.com - official documentation for Amazon Kinesis
- AWS re:Post (formerly forums) - community Q&A with AWS-staff-verified answers
- AWS Health Dashboard at health.aws.amazon.com
- AWS Service Quotas console and AWS Well-Architected Tool
Related fixes
Related guides worth a look while you sort this one out:
- Kinesis Data Streams cross-account consumer access
- Kinesis Data Streams enhanced fan-out consumer registration failed
- Kinesis Data Streams ExpiredIteratorException five minute
- Kinesis Data Streams ProvisionedThroughputExceededException write
- S3 hot prefix 503 SlowDown partition key randomization
- CloudFront real-time logs to Kinesis Data Stream cost and sampling tradeoffs