[SalesForce] Is ReplayId System field of Platfom Event unique

I was implementing a solution using Platform Events, and was wondering can I use ReplayId as a unique field for the new record I am creating after subscribing to fired platform event.

All I can see for Platform Events' ReplayID Field is

Each event message is assigned an opaque ID contained in the ReplayId
field. The ReplayId field value, which is populated by the system,
refers to the position of the event in the event stream. Replay ID
values are not guaranteed to be contiguous for consecutive events. For
example, the event following the event with ID 999 can have an ID of
1,025. A subscriber can store a replay ID value and use it on
resubscription to retrieve events that are within the retention
window. For example, a subscriber can retrieve missed events after a
connection failure. Subscribers must not compute new replay IDs based
on a stored replay ID to refer to other events in the stream.

There is no mention that replayId is unique and autoincrementing even after retention window.

I don't want to corrupt data if the replayId repeats itself.

Source: https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_define_ui.htm?search_text=Each%20event%20message%20is%20a

Best Answer

This may clarify to an extent. Both Platform Events and Streaming API are based on Bayeux protocol and CometD. This is something what the documentation link on Streaming API states on the replayId:

Each broadcasted event is assigned a numeric ID. IDs are incremented and not guaranteed to be contiguous for consecutive events. Each ID is guaranteed to be higher than the ID of the previous event. For example, the event following the event with ID 999 can have an ID of 1,025. The ID is unique for the org and the channel. The IDs of deleted events aren’t reused.

And this is what the documentation on Platform Event says:

The process of replaying platform events is the same as for other Streaming API events

However not really sure, what's the limit of the ids generated, as say it reaches 9999, does it reset to 1 or goes to 10000. But assuming it's a system field, it must have been accounted for a larger limit. But still, I would think these ids should not be used for any uniqueness outside of the event scope.

Related Topic