KinesisStream
Game telemetry and analytics with Amazon Kinesis Data Streams and Amazon Data Firehose from Blueprints and C++: buffered event tracking with an offline spool, batched puβ¦
Highlights
All 10 features βKinesisStream sends what happens in your game to AWS in real time and reads it back. Add the KinesisStream Telemetry component, call Track Event with a name, text properties and numbers, and every event becomes one JSON line with an event id, UTC timestamp, session, player, build, platform, map and sequence number. Events are buffered and sent in batches to an Amazon Data Firehose stream (straight into S3 for Athena and your data lake, or to an HTTP endpoint) or to a Kinesis data stream for real-time processing.
The component is built for real players: when the device is offline the queue moves to a size-capped spool on disk and is replayed later, rejected records are retried without resending the accepted ones, sampling is decided per session so sampled sessions stay complete, and Opt Out / Opt In respects the player's privacy choice across restarts. Global properties, session start / end events and statistics are included.
For servers, tools and live-ops dashboards, the KinesisStream Consumer component polls one shard or every shard of a stream on a background thread, follows reshards, renews expired iterators and saves a checkpoint per shard so it resumes where it stopped. Latent nodes cover Put Record, Put Records (500 records / 5 MB per request), shard iterators, Get Records, List Shards, stream summaries, Firehose puts and batches, and administration: creating, resizing and deleting streams, retention, waiting for a stream to become active and creating Firehose streams to S3 or HTTP endpoints.
Players get credentials from an Amazon Cognito identity pool: as guests, or signed in with a token from a Cognito user pool, Google, Apple, Facebook or any OpenID provider through Set Login Token. Static keys and the default AWS credential chain are available for development, dedicated servers and tools. Requests run on background worker threads with automatic retries, so the game thread never blocks, and every result arrives back on the game thread.
KinesisStream is part of the Alpha XP AWS collection for Unreal Engine 4.27 and 5.8. It includes the AWS SDK for C++ prebuilt for Win64, Linux and Android and ships with styled HTML documentation.
Key features
- KinesisStream Telemetry component: Track Event, standard fields, newline-delimited
- Offline spool on disk (size cap, replay on next start or when the network is back)
- Per-session sampling, persisted Opt Out / Opt In, global properties, session start /
- Kinesis Data Streams: Put Record, Put Records with retry of only the failed entries,
- KinesisStream Consumer component: polling consumer, all shards or one, reshard
- Amazon Data Firehose: Put Firehose Record, Put Firehose Record Batch with
- Administration: Create / Delete Stream (on-demand or provisioned), retention, Update
- Helpers: partition-key hashing and shard lookup, record builders, UTF-8 conversion,
- Amazon Cognito identity pools, static keys or the default AWS credential chain
- 88 Blueprint nodes, cancellable latent nodes, C++ API with native callbacks
Blueprint & C++ API
The API is organised into these entry points:
| Class | Type | Nodes | Use it for |
|---|---|---|---|
| KinesisStreamLibrary | Function library | 30 | Configuration, identity, record, event and JSON helpers for KinesisStream. |
| KinesisStreamTelemetryComponent | Actor component | 22 | The analytics emitter: Track Event builds a newline-delimited JSON line with standard fields (event id, UTC timestamp, session, player, build, platform, map, se⦠|
| KinesisStreamConsumerComponent | Actor component | 12 | Reads a Kinesis data stream by polling Get Records on a background thread (plain HTTPS - works on every platform). |
| Async action nodes | Latent Blueprint nodes | 2 | Latent node with success / failure output pins. |
Callable runs when executed Β· Pure no exec pin, returns a value Β· LatentAsync finishes later and fires its outputs
KinesisStream 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Cancel | Async | Async | Stops waiting for this request: none of its output pins fire any more. The request itself may still complete on AWS. |
| Is Finished | Async | Async | True after Cancel was called or the node finished. |
Consumer 12
| Node | Type | Available on | Description |
|---|---|---|---|
| Start Consumer(Stream Override: String) | Callable | Component | Starts polling in the background. |
| Stop Consumer | Callable | Component | Stops polling and saves the checkpoints. A poll in flight finishes in the background; its records are still delivered. |
| Is Running() β Boolean | Pure | Component | True from Start Consumer until Stop Consumer. |
| Get Lag() β Integer64 | Pure | Component | How far behind the newest record the slowest shard is, in milliseconds (0 = caught up). |
| Get Shard Lag(In Shard Id: String) β Integer64 | Pure | Component | Lag of one shard in milliseconds; -1 when the shard is not tracked. |
| Get Checkpoint(In Shard Id: String) β String | Pure | Component | The checkpoint (sequence number of the last processed record) of a shard; empty when none. |
| Set Checkpoint(In Shard Id: String, Sequence Number: String) | Callable | Component | Sets a shard's checkpoint, for example after you processed a page with Auto Checkpoint off. Saved with the next save. |
| Save Checkpoints() β Boolean | Callable | Component | Writes the checkpoints to disk now. Returns false when the file could not be written. |
| Reset Checkpoints | Callable | Component | Forgets every checkpoint (memory and file): the next start uses Starting Position again. |
| Get Shard States() β Array of Kinesis Stream Shard State | Pure | Component | Every tracked shard with its checkpoint, lag, record count and finished flag. |
| Get Stats() β Kinesis Stream Consumer Stats | Pure | Component | Counters since Start Consumer: records, polls, empty polls, errors, iterator renewals, shards, lag, uptime, last error. |
| Set Poll Interval(Seconds: Float) | Callable | Component | Changes the seconds between polls at runtime (0.2 - 60). |
Config 4
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Region(Region: String) | Callable | Static | Switches the AWS region used by every following request. |
| Set Credential Mode(Mode: Kinesis Stream Credential Mode) | Callable | Static | Overrides the credential mode from the project settings at runtime. |
| Is Configured() β Boolean, Problem | Pure | Static | Checks the settings and returns false with a reason when requests cannot work yet. |
| Set Default Streams(Stream Name: String, Delivery Stream Name: String) | Callable | Static | Runtime override of the default data stream and Firehose stream (empty keeps the project setting). |
Identity 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Login Token(Provider: String, Token: String) | Callable | Static | Signs the player in to the Cognito identity pool with a token from an identity provider. |
| Clear Login Tokens | Callable | Static | Forgets all login tokens and the cached identity (the player becomes a guest again). |
| Set Static Credentials(Access Key Id: String, Secret Access Key: String, Session Token: String) | Callable | Static | Uses these credentials from now on (Static Keys mode), for example temporary keys handed out by your own backend. |
| Get Identity Id() β String | Pure | Static | The Cognito identity id of this player, empty until credentials were resolved once. |
| Make User Pool Provider Name(Region: String, User Pool Id: String) β String | Pure | Static | Builds the identity-pool login key of a Cognito user pool: cognito-idp.<region>.amazonaws.com/<user pool id>. |
Records 11
| Node | Type | Available on | Description |
|---|---|---|---|
| Make Record Entry(Data: String, Partition Key: String, Explicit Hash Key: String) β Kinesis Stream Record Entry | Pure | Static | Builds a text record for Put Record(s). Empty Partition Key = a random one. |
| Make Record Entry From Bytes(Bytes: Array of Byte, Partition Key: String, Explicit Hash Key: String) β Kinesis Stream Record Entry | Pure | Static | Builds a binary record for Put Record(s). Empty Partition Key = a random one. |
| String To UTF-8 Bytes(Text: String) β Array of Byte | Pure | Static | Encodes text as UTF-8 bytes. |
| UTF-8 Bytes To String(Bytes: Array of Byte) β String | Pure | Static | Decodes UTF-8 bytes to text. |
| Hash Partition Key(Partition Key: String) β String | Pure | Static | The 128-bit hash key (decimal) Kinesis computes for a partition key: the MD5 of its UTF-8 bytes read as an unsigned big-endian integer. |
| Get Shard For Partition Key(Partition Key: String, Shards: Array of Kinesis Stream Shard, Explicit Hash Key: String) β Boolean, Shard Id | Pure | Static | Finds the shard a record goes to (an open shard whose hash key range contains the key). Explicit Hash Key wins over the partition key when set. |
| Make Random Partition Key() β String | Callable | Static | A new random partition key (GUID): spreads records evenly over all shards. |
| Split JSON Lines(Text: String) β Array of String | Pure | Static | Splits newline-delimited JSON (one record from Firehose / the telemetry component) into lines; empty lines are skipped. |
| Make Stream Arn(Account Id: String, Stream Name: String, Region: String) β String | Pure | Static | arn:aws:kinesis:<region>:<account>:stream/<name>. Empty Region = the configured region. |
| Get Name From Arn(Arn: String) β String | Pure | Static | The resource name at the end of a Kinesis or Firehose ARN ("stream/telemetry" -> "telemetry"); other text is returned unchanged. |
| Is Retryable Error Code(Error Code: String) β Boolean | Pure | Static | True for error codes worth sending again later (throttling, internal failures, network errors). |
Events 7
| Node | Type | Available on | Description |
|---|---|---|---|
| Make Event(Name: String, Properties: Map String β String, Values: Map String β Float) β Kinesis Stream Event | Pure | Static | Builds an analytics event for Track Prepared Event or Event To JSON Line. |
| Make Properties(Keys: Array of String, Values: Array of String) β Kinesis Stream Properties | Pure | Static | Builds a property map from two parallel arrays (keys[i] -> values[i]); extra keys get empty values. |
| Add Event Property(Event: Kinesis Stream Event, Key: String, Value: String) β Kinesis Stream Event | Pure | Static | Returns the event with one more text property. |
| Add Event Value(Event: Kinesis Stream Event, Key: String, Value: Float) β Kinesis Stream Event | Pure | Static | Returns the event with one more numeric value. |
| Event To JSON Line(Event: Kinesis Stream Event, Append Newline: Boolean) β String | Pure | Static | Serializes an event to one JSON line: {"event","event_id","ts","props","values"} (no standard context fields - the telemetry component adds session, player, buiβ¦ |
| Parse Event Line(Line: String) β Boolean, Event, Standard Fields | Pure | Static | Parses a JSON line written by Event To JSON Line or the telemetry component (for consumers and tools). |
| Make ISO 8601 Timestamp(Time: Date Time) β String | Pure | Static | ISO-8601 UTC text with milliseconds, for example 2026-10-28T14:03:07.123Z (the "ts" format of event lines). |
JSON 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Struct To JSON(Struct: Integer) β Boolean, Json | Callable | Static | Converts any struct to a JSON object string (property names are used as keys). |
| JSON To Struct(Json: String) β Boolean, Out Struct | Callable | Static | Fills a struct from a JSON object string; fields that are missing keep their default values. |
| Get Json Field(Json: String, Path: String) β Boolean, Value | Pure | Static | Reads one value from a JSON document with a path such as "props.level" or "items[2].id". |
Telemetry 11
| Node | Type | Available on | Description |
|---|---|---|---|
| Track Event(Event Name: String, Properties: Map String β String, Values: Map String β Float) β Boolean | Callable | Component | Tracks one event with text properties and numeric values. Returns false when opted out, the session is not sampled or the event is too large for one record. |
| Track Prepared Event(Event: Kinesis Stream Event) β Boolean | Callable | Component | Tracks an event built with Make Event (keeps its timestamp and event id when set). |
| Flush Now() β Boolean | Callable | Component | Sends the queued events now. False when nothing is queued, a flush is already running or telemetry is opted out. |
| Get Queue Size() β Integer | Pure | Component | Events waiting in the memory queue (not counting a flush in flight or the spool). |
| Get Dropped Count() β Integer | Pure | Component | Events dropped since BeginPlay (queue and spool full, too large, or permanently rejected). |
| Set Global Property(Key: String, Value: String) | Callable | Component | Adds a property to every following event (for example "region" or "ab_group"). |
| Remove Global Property(Key: String) β Boolean | Callable | Component | Removes a global property. Returns false when it was not set. |
| Clear Global Properties | Callable | Component | Removes every global property. |
| Get Global Properties() β Map String β String | Pure | Component | The global properties added to every event. |
| Get Stats() β Kinesis Stream Telemetry Stats | Pure | Component | Counters since BeginPlay: tracked, sampled out, sent, failed, dropped, spooled, replayed, flushes, queue bytes. |
| Set Destination(New Destination: Kinesis Stream Destination, New Stream Name: String) | Callable | Component | Switches the destination at runtime (queued events go to the new one). Empty Stream Name = the default from the settings. |
Session 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Start Session(Properties: Map String β String) β String | Callable | Component | Starts a new session (ends the current one first): new session id, sequence back to 0, sampling decided. Returns the session id. |
| End Session | Callable | Component | Ends the session (session_end event) and flushes. |
| Get Session Id() β String | Pure | Component | The current session id, empty when no session runs. |
| Set Player Id(New Player Id: String) | Callable | Component | Sets the player id of the following events, for example after login. |
| Set Sampling Rate(Rate: Float) | Callable | Component | Changes the sampling rate (0 - 1); applies from the next session. |
Privacy 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Opt Out(Delete Spool: Boolean) | Callable | Component | The player does not want analytics: clears the queue, stops tracking and (optionally) deletes the spool. Persisted when Persist Opt Out is on. |
| Opt In | Callable | Component | Tracking is allowed again (removes the persisted opt-out). |
| Is Opted Out() β Boolean | Pure | Component | True while the player opted out. |
Spool 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Replay Spool() β Integer | Callable | Component | Loads spooled events into the queue now (as far as the queue has room) and deletes the loaded files. Returns how many were loaded. |
| Get Spool Size() β Integer | Pure | Component | Bytes in the spool folder. |
| Clear Spool() β Integer | Callable | Component | Deletes every spool file. Returns how many files were deleted. |
Events & delegates
Bind these in Blueprint (drag off the object β Bind Event) or with AddDynamic in C++.
| Event | Parameters | Fires on | When it fires |
|---|---|---|---|
| On Success | Result (Kinesis Stream Put Result), Error (Kinesis Stream Error) | KinesisStreamPutRecordAction | |
| On Failure | Result (Kinesis Stream Put Result), Error (Kinesis Stream Error) | KinesisStreamPutRecordAction | |
| On Records | Records (Array of Kinesis Stream Record), Shard Id (String), Millis Behind Latest (Integer64) | KinesisStreamConsumerComponent | A page of records from one shard (in sequence order). |
| On Shard Finished | Shard Id (String) | KinesisStreamConsumerComponent | A shard was closed by a reshard and has been read completely. |
| On Consumer Error | Error (Kinesis Stream Error) | KinesisStreamConsumerComponent | A poll failed. Retryable errors are retried with back-off; others also stop the consumer (On Consumer Stopped follows). |
| On Consumer Stopped | β | KinesisStreamConsumerComponent | The consumer stopped (Stop Consumer, a permanent error or end of play). |
| On Flushed | Sent Count (Integer), Failed Count (Integer) | KinesisStreamTelemetryComponent | A batch reached the stream: accepted and permanently rejected counts. |
| On Failed | Error (Kinesis Stream Error), Lost Count (Integer) | KinesisStreamTelemetryComponent | A flush failed or records were lost (Lost Count = records dropped for good; retryable ones are re-queued or spooled). |
Project settings
Configure once under Project Settings βΊ Plugins βΊ KinesisStream β values are saved to the project's config .ini, so they travel with the project and your build.
| Setting | Section | Type | What it does |
|---|---|---|---|
| Region | Connection | String | AWS region of your streams, delivery streams and identity pool, for example "us-east-1" or "eu-west-1". |
| Credential Mode | Credentials | Credential Mode | Where request credentials come from. |
| Identity Pool Id | Credentials | String | Cognito identity pool, for example "us-east-1:01234567-89ab-cdef-0123-456789abcdef". |
| Allow Guest Access | Credentials | Boolean | Allow unauthenticated (guest) identities before Set Login Token is called. The pool must allow guest access too. |
| Access Key Id | Credentials | String | Access key for Static Keys mode. Keys saved here end up in DefaultGame.ini - use them for development and servers only. |
| Secret Access Key | Credentials | String | Secret key for Static Keys mode. |
| Allow Static Keys In Shipping | Credentials | Boolean | Static keys are refused in Shipping builds unless this is enabled (for example on a dedicated server). |
| Endpoint Override | Connection | String | Custom endpoint, for example a local emulator such as "http://localhost:4566". Empty = the regional AWS endpoint. |
| Request Timeout Ms | Connection | Integer | Total time a request may take, in milliseconds. |
| Connect Timeout Ms | Connection | Integer | Time allowed to open the connection, in milliseconds. |
| Max Retries | Connection | Integer | Automatic retries with exponential back-off for throttled and transient failures (whole requests). |
| Worker Threads | Connection | Integer | Worker threads that run requests in the background (requests never block the game thread). |
| Verify SSL | Connection | Boolean | Verify TLS certificates. Only disable for a local emulator. |
| Log Sdk Warnings | Connection | Boolean | Forward SDK warnings and errors to the Output Log (LogKinesisStream). |
| Default Stream Name | Streams | String | Kinesis data stream (name or ARN) used when a node or component leaves Stream Name empty, for example "mygame-telemetry". |
| Default Delivery Stream Name | Streams | String | Firehose stream used when a node or component leaves Delivery Stream Name empty, for example "mygame-events-to-s3". |
Options & enums
| Enum | Values |
|---|---|
| Credential Mode | Cognito Identity Pool Static Keys Default Credential Chain |
| Iterator Type | Trim Horizon (oldest) Latest (new records only) At Timestamp At Sequence Number After Sequence Number |
| Capacity Mode | On-Demand Provisioned |
| Shard Filter | All Shards Open Shards (At Latest) At Trim Horizon From Trim Horizon After Shard Id At Timestamp From Timestamp |
| Destination | Kinesis Data Stream Data Firehose |
| Partition Mode | Session Id Player Id Event Name Random |
| Compression | Uncompressed GZIP ZIP Snappy Hadoop Snappy |
Compatibility
One ready-made build per engine version is included in the download β copy the one that matches your project.
| Platform | Supported in |
|---|---|
| Windows | Editor & packaged |
| Linux | Editor & packaged |
| Android | Packaged builds |
| Module | Type | Loading phase |
|---|---|---|
| KinesisStream | Runtime | Default |
Technical details
| Code modules | KinesisStream (Runtime), KinesisStreamSdk (External, Source/ThirdParty - prebuilt AWS SDK for C++) |
|---|---|
| Blueprints | 0 Β· C++ classes: 27 |
| Network replicated | No |
| Development platforms | Windows: Yes, Mac: No, Linux: Yes |
| Target build platforms | Win64, Linux, Android |
| Third-party software | Yes - AWS SDK for C++ 1.11.916 (Apache-2.0), with the AWS Common Runtime libraries, in Source/ThirdParty/KinesisStreamSdk |
| Engine versions | Unreal Engine 4.27 Β· 5.8 β a build for each is included |
| C++ classes | 27 + 22 structs |
| Blueprint nodes | 66 |
| Events | 8 |
| Documentation | Documentation.html (in the download) |
| Download | KinesisStream.zip Β· 37.8 MB |
| Version | v1.0.0 |
What's in the download
| File | What it is |
|---|---|
| KinesisStream 4.27.zip | Plugin build for Unreal Engine 4.27 |
| KinesisStream 5.8.zip | Plugin build for Unreal Engine 5.8 |
| Documentation.html | Documentation (open in a browser) |
Quick start
- Unzip the download and pick the build that matches your engine (4.27 Β· 5.8).
- Copy the KinesisStream folder into your project's Plugins/ folder (create it if needed).
- Open the project, enable KinesisStream under Edit βΊ Plugins and restart the editor.
- Fill in Project Settings βΊ Plugins βΊ KinesisStream.
- Right-click in any Blueprint graph and search KinesisStream β or include the public headers from C++.
- Package for your target platform (Windows, Linux, Android).
Good to know
Built for Unreal Engine 4.27 and 5.8. Requires an AWS account; Kinesis Data Streams, Data Firehose, S3 and Cognito usage is billed by AWS. Game clients only need kinesis:PutRecord(s) / firehose:PutRecord(Batch) on their streams; stream and delivery-stream management nodes need admin IAM permissions and are meant for tools and servers. The consumer polls with Get Records; enhanced fan-out (SubscribeToShard, HTTP/2) is not used so it works on every platform. On Linux and Android the SDK uses the engine's libcurl and OpenSSL and the engine's certificate store. On Win64 the SDK is one DLL with a plugin-specific name, so KinesisStream can be installed next to other AWS-based plugins. Never ship long-term access keys in a game client: use a Cognito identity pool for players. Developed and maintained by Alpha XP.
Everything included
- KinesisStream Telemetry component: Track Event, standard fields, newline-delimitedβ¦
- Offline spool on disk (size cap, replay on next start or when the network is back)
- Per-session sampling, persisted Opt Out / Opt In, global properties, session start /β¦
- Kinesis Data Streams: Put Record, Put Records with retry of only the failed entries,β¦
- KinesisStream Consumer component: polling consumer, all shards or one, reshardβ¦
- Amazon Data Firehose: Put Firehose Record, Put Firehose Record Batch withβ¦
- Administration: Create / Delete Stream (on-demand or provisioned), retention, Updateβ¦
- Helpers: partition-key hashing and shard lookup, record builders, UTF-8 conversion,β¦
- Amazon Cognito identity pools, static keys or the default AWS credential chain
- 88 Blueprint nodes, cancellable latent nodes, C++ API with native callbacks
Platforms
Requirements
- Unreal Engine 4.27 and 5.8
- Develop on Windows (Win64)
- Blueprints and C++
In the download
Personal
One non-commercial project
- 1 activation seat
- 1 year of updates
- One end product
- Non-commercial use
- Community support
- 14-day refund window
Commercial
Ship paid products
- 5 activation seats
- 1 year of updates
- One paid end product
- Unlimited end users
- Priority support
- Source files
- 14-day refund window
Extended
Resell & white-label
- Unlimited activation seats
- Lifetime updates
- Unlimited end products
- White-label & resell
- 1-hour SLA
- Seat-free team use
- 14-day refund window
One purchase per product, no subscription. Each licence comes with a signed key β 1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended. Paid licences can be refunded within 14 days from your order page.
- v1.0.0Latest
- Unreal Engine 4.27 and 5.8
- Blueprint and C++ API, HTML documentation
Be the first to review KinesisStream β reviews come from customers who bought it, so every one is a verified purchase.
Frequently asked
How do I get the files after paying?
Straight after checkout you land on your order page with the download button and your licence key. A receipt is emailed to you, and every order stays in My library.
Which licence do I need?
Personal β One non-commercial project. Commercial β Ship paid products. Extended β Resell & white-label. The Licences tab compares them side by side.
On how many devices can I activate it?
1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended.
How long do I get updates?
Personal: 1 year of updates, Commercial: 1 year of updates, Extended: lifetime updates, counted from your purchase.
Can I get a refund?
Yes β paid licences can be refunded within 14 days, straight from your order page.
Is the download safe?
The file was scanned with ClamAV when it was published. Its SHA-256 checksum is listed under Features β In the download, so you can verify the file you receive.
Do I need an account?
No. Checkout only needs your email. Signing in keeps all your purchases, keys and downloads together in My library.
More like this
AudioLens
Real-time audio analysis: FFT spectrum, onset and beat detection, and a full set of time- and frequency-domain descriptors..
β β β β β No reviews yetTTechHarbour$14.00BlueprintTCP
BlueprintTCP lets you connect to any TCP server and exchange data entirely from Blueprints β no C++ and no networking boilerplate.
β β β β β No reviews yetTTechHarbour$12.99BluetoothLink
Bluetooth Low Energy for Unreal - scan, connect, read, write and subscribe to BLE devices on Android and iOS.
β β β β β No reviews yetTTechHarbour$11.99ClusterLink
SocketCluster realtime client for Unreal - pub/sub channels, auth engine and JSON codec, usable from Blueprints.
β β β β β No reviews yetTTechHarbour$11.99