-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support EventStore Projection #8
Comments
Yes - using Kafka is definitely not a panacea and having consistent programming models between As evidenced by this discussion a) I personally am no expert in such ES facilities This would manifest as: Now, to your specific use case:- So, in short, if you wanted to do a PR to add such a thing In terms of this organically happening without input from your side, I'd venture: |
There's super-early WIP wrt this in jet/dotnet-templates#11 |
Quick update: while there is work in train to provide wiring for projecting from EventStore, I should point out (esp upon re-reading the OP) that there are no current plans regarding storing consumer positions within EventStore itself coming from usage inside Jet. I'll leave this open as I don't feel the need to rule it out, but in terms of adding logic into Having said that... If you had a spike or more detail, I'd definitely be interested to hear more... |
have sliced and diced some PRs - jet/dotnet-templates#16 shows the current WIP I alluded to above |
jet/dotnet-templates#16 has had a lot of progress - it's about to sprout a way to store progress / offsets in Cosmos. |
Looking like we'll build this - idea is to provide a dotnet-templates template which consumes from $all, and maintains offset in an Equinox.Cosmos instance using the Checkpoint aggregate in Propulsion.Cosmos, which is used for Sync from ES->Cosmos. Clearly this makes no sense for apps that don't already have a dependency on such a store. With a bit of hacking, it should be possible to hook this to store it elsewhere. Interested to hear what sort of backing stores people have in mind (realistically, I personally won't be committing to actually doing the implementation) |
This is an interesting issue. I'm using ES and want to project to SQL Server/Elasticsearch/.... by trailing $all. In the past I've had this kind of functionality with SQL Stream Store and Projac to project events into SQL Server tables, but I didn't find anything similar for ES. Initially I started writing it myself, but if propulsion would support this, that would be awesome. |
It's looking like my work needs mean I'll be writing up a proper end to end set of docs for Propulsion that explain how its pipeline fits together soon (I edited and deleted forward looking statements here). There are similar systems out there which have similar architectures for other platforms (the name escapes me) - it should be mentioned that the split of the concepts in Propulsion derives from scaling and perf tuning of large sync and projection pipelines with real data and needs (mainly mixing and matching ES and Cosmos) - i.e. this is not me trying to build some abstract projection framework. Sources+checkpointsthe summaryProjector template has wiring to read: An easy enough to achieve extension would be to make an adjusted version of (a) that writes to an EventStore stream every 5s that has been configured to only maintain the most recent event (it's pretty pluggable, if you e.g. had something like Consul, you could write to that too) this is the main open question that is critical to resolving this Issue as I see it Schedulers / Handlers
I need to write docs on this Propulsion SinksPropulsion has Sinks for ES and Cosmos. Sinks take event streams and replicate them - i.e. if you are migrating from ES->ES, ES->Cosmos, Cosmos->ES or Cosmos->Cosmos - the this is an aside to your question, and the OP ElasticSearch / SQLTL;DR Its conceivable that one could Projac-ish helpers in a I'll expand a bit in case that helps with conveying the thinking a bit: Internally, we don't have any work in the near term writing to Elastic Search (don't get me wrong, we use it, just not that much in projections on the team I work on atm). On Azure, for cases where you're targeting SQL but are not doing lots of indexing and/or searching/random queries, I'd actually give sinking to For Sql, we do (we have internal closed source helpers which are pretty generic - i.e. they might cover Projac-like usage, but are not as purposefully designed). I dont have plans/anticipate it crossing my radar to extract/polish such a facility, but I do know that lots of folks would use it. If you had a free standing set of helpers, a
|
related: this (incomplete) PR provides for projecting from ESDB $all, storing checkpoints in ESDB |
related: Propulsion.EventStoreDb in V4 implements the reader using gRPC. Leaving this issue open as there's no in-the box checkpointing that stores the checkpoints in ESDB (supported checkpoint stores are DynamoDB, CosmosDB, Postgres and SQL Server) |
For EventStore storage specifically, it looks like this library is designed so that EventStore is only used for storage of events and that subsequent communicating that events occured is offloaded to Kafka. The EventStore product does support messaging via PersistentSubscription and it would be nice for smaller projects to be able to use just EventStore and not have to spin up a Kafka cluster if that kind of scale is not needed.
Specifically I'd love an API where you can subscribe either to a specific aggregate
user-1234
or a projectionuser-*
and have the library handle things like checkpointing (storing the last read offset for a client in EventStore itself) similar to how PersistentSubscriptions work in the EventStore API today.The text was updated successfully, but these errors were encountered: