Closed jmwilkinson closed 4 years ago
Hi, outside contribution is definitely welcome! If it's mostly minor changes, feel free to make PRs directly. If you're interested in working on larger changes or major features, all I ask is you open an issue first describing your plan.
There is no expectation Liftbridge will ever be merged into mainline NATS work. Liftbridge is a standalone project.
Development is indeed ongoing. I'm currently working on key compaction.
Regarding Jetstream, a little bit of history which will hopefully help clarify things. "Jetstream" was actually my original name for this project as I was conceptualizing it while I was a member of the NATS team. I have since moved on from the NATS team and I decided to rename this project to Liftbridge to avoid confusion with whatever the NATS team has planned for Jetstream. As such, Liftbridge and Jetstream are completely unrelated projects and are not affiliated with each other. I can't speak to Synadia's plans for Jetstream. I can, however, speak to the plans for Liftbridge. :)
Ok, thanks.
I really like the technical direction of this project. I read your blog posts on Jetstream about a year ago and they really resonated with my own opinions what a performant distributed commit log should look like, after having used both Kafka and nats.
Time permitting, I would like to contribute the the embedded nats option... I think simplicity of setup should be a core objective, and while a nats cluster is relatively easy to start up, it's still another thing to manage.
To that end, I've investigated what it would take to actually embed the "nats" portion of the server, and the difficult thing seems to be how coupled liftbridge currently is with the nats connection. My initial approach was to try and abstract the Conn
behind an interface, but I ran into problems with the nats transport which explicitly requires a nats conn. Of course, anything can be refactored an interfaces are easily introduced in Go, but I was wondering if you have another approach in mind?
My initial plan was to model it after what NATS Streaming does since NATS Streaming also supports an embedded mode of NATS. This allows it to just use Conn
as usual and seems like the simplest approach. https://github.com/nats-io/nats-streaming-server/blob/247d7fa2c948ab918d7b4a9f761010082e8b92ea/server/server.go#L2083-L2107
The biggest pain/point of awkwardness seems like it's how best to deal with config for the embedded gnatsd.
It's funny, just to get something working my initial attempt did exactly that- just made the Liftbridge main start the nats server.
I think there are two problems with that approach, though.
I'm kinda struggling with how much value nats as a whole brings, beyond the core of subject routing a management...
Yeah, it's a little clumsy I agree, though my primary goal for the project was to provide Kafka-like semantics for NATS, not to necessarily be a pure standalone Kafka replacement. But my vision for it was to allow it to run in a standalone fashion with NATS powering it but ultimately abstracted away, then provide a gRPC publish API. This way, legacy NATS clients could continue to use it but newer clients could switch over to the gRPC-based protocol.
Closing this issue since the embedded NATS work will be tracked in https://github.com/liftbridge-io/liftbridge/issues/19.
Regarding Jetstream, a little bit of history which will hopefully help clarify things. "Jetstream" was actually my original name for this project as I was conceptualizing it while I was a member of the NATS team. I have since moved on from the NATS team and I decided to rename this project to Liftbridge to avoid confusion with whatever the NATS team has planned for Jetstream. As such, Liftbridge and Jetstream are completely unrelated projects and are not affiliated with each other. I can't speak to Synadia's plans for Jetstream. I can, however, speak to the plans for Liftbridge. :)
FYI all the info about Synadia's plans for the official NATS Jetstream project can be found here https://github.com/nats-io/jetstream
Hi, how open is this project to outside contributions?
Related, is there an expectation it will ever be merged back into "mainline" nats work?
Is development here ongoing? Does it relate in any way to the mention of "Jetstream" on the nats-io project page?