-
Notifications
You must be signed in to change notification settings - Fork 3.6k
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
PIP-205: Reactive Java client for Apache Pulsar #17335
Comments
@lhotari Cool! Several comments here:
Does the test plan include integration with all or part of the framework listed here?
Could you share the links for these statements? |
thanks for the comments @tisonkun I was thinking about that option. However, I intentional proposed
This is an open source project and it's open for contributions. It's possible to make changes after we get things started. The main proposal is about making the decision to start the work and open it for contributions. Reactive Streams implementations use the Reactive Streams TCK to ensure that they have been implemented according to a spec. Interoperability across implementations is supported on all implementations. There could be some value in providing optional libraries that add direct support for a particular library, let's say Akka Streams, without having the need to expose types of the Reactive Streams implementation used to implement the Reactive client. This optional library could also shade the implementation library completely if that is useful for some reason. However this is not part of the initial scope of the Reactive client and the Apache Pulsar project will decide how it is developed further. Akka Streams can be used also without any of this kind of special adaptation. Docs for Akka Streams Reactive Streams interop. Similar solutions exist for all Reactive Streams implementations.
That's not something that typically is expressed in a statement that can be shared by a link. :) What are you specifically interested to know? |
Yep. I can see the reason that
Agree. A proposal can go with a test plan, I'm trying to ask for the plan you'll cover in this turn.
I'd expect conversations on issues or a public channel where more contributors show their interests :) Although I support this proposal, I didn't see other users who ask for such a functionality. |
We have a mailing list thread for this PIP, it's https://lists.apache.org/thread/xkfl5px7qgt5rrxw5pj0g318r6mbdlz1 . |
The issue had no activity for 30 days, mark with Stale label. |
if I get it right this can be found in its own repository now: |
@hpvd Thanks for bringing this issue up. I agree to close this issue as completed since we even released a few versions of pulsar-client-reactive already :) |
Status: Delivered - https://github.com/apache/pulsar-client-reactive
Mailing list thread: https://lists.apache.org/thread/9n961zvr5y4g77n7pfsptg796r2obfo1
Motivation
There's a need to "go reactive from end-to-end" when building modern reactive applications with platforms such as Spring Reactive.
There are ways to adapt the Apache Pulsar Java client async API calls to Reactive Streams with a few lines of code.
However, a lot will be missing and achieving the complete solution will require much more effort.
A better solution would be to have first-class support Reactive Streams in Apache Pulsar.
Reactive Streams is an interoperability specification and there are multiple implementations for the JVM.
It's not about a single programming language.
For example, a Reactive client for Apache Pulsar supporting Reactive Streams can be used together with Project Reactor / Spring Reactive, Akka Streams, RxJava 3, Vert.x, SmallRye Mutiny (RedHat/Quarkus) and others.
Goal
Provide Reactive Java client for Apache Pulsar
The Reactive Java client for Apache Pulsar exposes a Reactive Streams compatible Reactive client API for Apache Pulsar.
Reactive programming is about non-blocking applications that are asynchronous and event-driven and require a small number of threads to scale. The Reactive Java client for Apache Pulsar supports non-blocking reactive asynchronous back pressure for producing and consuming messages so that the producing or consuming pipeline doesn't get overwhelmed by producing or consuming.
Libraries that support Reactive Streams provide a programming model that is efficient and optimal for message producing and consuming (processing) use cases.
API Changes
Establish a Reactive Streams compatible client API for Apache Pulsar.
This client will be published in Maven central as a library.
Implementation
There's an existing proof-of-concept available at https://github.com/datastax/reactive-pulsar .
This implementation will be used as a reference for an entirely new implementation that is started as a new repository under the Apache Pulsar project.
The proposal for the repository location is https://github.com/apache/pulsar-client-reactive .
The Maven central group Id is "org.apache.pulsar" and the main artifact id is "pulsar-client-reactive".
The root package name is "org.apache.pulsar.reactive.client".
The implementation will provide an interface module that abstracts the Reactive client API.
This interface is implemented by wrapping the current Apache Pulsar Java client and adapts the existing async Java API to the the Reactive client API.
The reason for this particular detail is that it is possible to provide a native Reactive client later while having the possibility to start developing applications immediately using the Reactive client API. Applications depending on the API will be able to migrate to use the native Reactive client with minor or no changes when it becomes available.
Anything else?
By having an official Reactive Java client for Apache Pulsar, it will provide a way to contribute and improve the official client.
Other opensource projects might want to provide support for using Apache Pulsar within reactive application frameworks. Without an official reactive client, this becomes hard, since open source projects would like to use stable client dependencies instead of a hobby project provided by an individual.
There are several members within the existing Apache Pulsar contributors and committers that have expressed the desire to contribute to a Reactive client for Apache Pulsar and are willing to maintain the new repository. With the new repository and sub-project we will most likely see new active contributors and could possibly appoint new Apache Pulsar committers to the project to empower the developers working on this new sub-project.
The text was updated successfully, but these errors were encountered: