Lemm put forward some basic terms before answering :
EventHubs is a high-performance pipeline for receiving long-term events. Simply put, this is a reliable stream of events in the cloud.
The offset on EventData (one event in the stream) is literally a cursor in the stream. The presence of this cursor will enable operations such as - resume reading from this cursor (aka Offset) - inclusively or exclusively.
The EventProcessor library is a framework created by the EventHubs team on top of the ServiceBus SDK to create an "event gu receiver" - it looks simpler. ZooKeeper for Kafka <-> EPH for Event Hub . It will make sure that the process that starts the EventProcessor on a specific partition dies / crashes - it will be resumed from the last Checkpointed offset - in another available instance of EventProcessorHost.
CheckPoint : Today - EventHubs only supports client-side validation. When you call Checkpoint from your client code:
await context.CheckpointAsync();
- it is converted to a storage call (directly from the client), which will store the current offset in the storage account you provided. The EventHubs service will not contact the repository to check the check.
ANSWER
The EventProcessor Framework is designed to achieve exactly what you are looking for.
Control points are not saved through the server (aka EVENTHUBS Service). It is purely on the client side. You are talking to Azure Storage. For this reason, the EventProcessor library introduces a new additional dependency - AzureStorageClient . You can connect to the storage account and to the container in which the control points are recorded - we store information about the owner - EPH instances (names) to the sections of the EventHub hubs that they own and to which control point they are currently being read / processed until since then.
According to the timer-based checkpoint pattern â you initially had â if the process stopped, you would re-do the events in the last 5-minute window. This is a healthy sample, like:
- the fundamental assumption is that faults are rare events, so you will be dealing with duplicate events
- in the end, you'll make fewer calls to the vault service (which you can easily overflow by checking frequently). I would take one more step and actually make the checkpoint call asynchronously. OnProcessEvents don't need to fail if a breakpoint fails!
if you want to repeat themselves completely without events, you will need to build this deduplication logic in a downstream pipeline.
- every time EventProcessorImpl is started - there is no request for your last flow from the downstream. he received and continues to discard events until the current sequence no.
here's a more general reading on Event Hubs ...
source share