diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinder.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinder.java index eee79f00a..efda3fd65 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinder.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinder.java @@ -89,7 +89,12 @@ import org.springframework.util.StringUtils; * @author Soby Chacko * @since 4.0 * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) public class ReactorKafkaBinder extends AbstractMessageChannelBinder, ExtendedProducerProperties, KafkaTopicProvisioner> diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java index 7aeef5220..38dd1c085 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java @@ -41,7 +41,13 @@ import org.springframework.context.annotation.Import; * @author Gary Russell * @author Chris Bono * @author Soby Chacko + * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) @Configuration(proxyBeanMethods = false) @ConditionalOnMissingBean(Binder.class) @EnableConfigurationProperties({ KafkaProperties.class, KafkaExtendedBindingProperties.class }) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicator.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicator.java index 3f4887df8..dca4a7480 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicator.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicator.java @@ -35,7 +35,13 @@ import org.springframework.scheduling.concurrent.CustomizableThreadFactory; * {@link org.springframework.boot.actuate.health.HealthIndicator} for Reactor Kafka Binder. * * @author Soby Chacko + * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) public class ReactorKafkaBinderHealthIndicator extends AbstractKafkaBinderHealthIndicator { private final ReactorKafkaBinder binder; diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicatorConfiguration.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicatorConfiguration.java index 0301a7e21..d7177dc80 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicatorConfiguration.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderHealthIndicatorConfiguration.java @@ -34,7 +34,13 @@ import org.springframework.util.ObjectUtils; /** * @author Soby Chacko * @since 4.1.2 + * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) @Configuration(proxyBeanMethods = false) @ConditionalOnClass(name = "org.springframework.boot.actuate.health.HealthIndicator") @ConditionalOnEnabledHealthIndicator("binders") diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReceiverOptionsCustomizer.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReceiverOptionsCustomizer.java index 2f2fbc230..1e29f07aa 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReceiverOptionsCustomizer.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReceiverOptionsCustomizer.java @@ -36,7 +36,12 @@ import org.springframework.core.Ordered; * @author Gary Russell * @since 4.0.2 * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) public interface ReceiverOptionsCustomizer extends BiFunction, ReceiverOptions>, Ordered { diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/SenderOptionsCustomizer.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/SenderOptionsCustomizer.java index 37070e865..f2a6556a8 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/SenderOptionsCustomizer.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/SenderOptionsCustomizer.java @@ -36,7 +36,12 @@ import org.springframework.core.Ordered; * @author Gary Russell * @since 4.0.2 * + * @deprecated since 4.3 + * See the updates in: ... + * A suggested alternative is to use the regular Kafka binder with reactive types. + * This approach has some limitations as the application need to handle reactive use cases explicitly. */ +@Deprecated(since = "4.3", forRemoval = true) public interface SenderOptionsCustomizer extends BiFunction, SenderOptions>, Ordered { diff --git a/docs/modules/ROOT/pages/kafka/kafka-reactive-binder/overview.adoc b/docs/modules/ROOT/pages/kafka/kafka-reactive-binder/overview.adoc index 48c6a5d8b..968528de2 100644 --- a/docs/modules/ROOT/pages/kafka/kafka-reactive-binder/overview.adoc +++ b/docs/modules/ROOT/pages/kafka/kafka-reactive-binder/overview.adoc @@ -1,6 +1,8 @@ [[reactive-kafka-binder]] = Overview +NOTE: As of Spring Cloud Stream version 4.3.0, the reactive Kafka binder is deprecated and will be completely removed in a future release. See the related updates in https://spring.io/blog/2025/05/20/reactor-kafka-discontinued[Reactor Kafka Discontinued Blog Post]. Please continue to use the regular message channel based Kafka binder with reactive types. Keep in mind that the applications will need to handle the various reactive use cases explicitly using the reactor programming model and support from the Project Reactor directly. + Kafka binder ecosystem in Spring Cloud Stream provides a dedicated reactive binder based on the https://projectreactor.io/docs/kafka/release/reference/[Reactor Kafka] project. -This reactive Kafka binder enables full end-to-end reactive capabilities such as backpressure, reactive streams etc. in applications based on Apache Kafka. +This reactive Kafka binder enables full end-to-end reactive capabilities such as backpressure, reactive streams, etc. in applications based on Apache Kafka. When your Spring Cloud Stream Kafka application is written using reactive types (`Flux`, `Mono` etc.), it is recommended to use this reactive Kafka binder instead of the regular message channel based Kafka binder.