From 09ec23b4bc9d4db94b45b6be57c48d411d6e6a8b Mon Sep 17 00:00:00 2001 From: Marius Bogoevici Date: Wed, 14 Sep 2016 14:01:45 -0400 Subject: [PATCH] Minor polishing and refactoring --- .../src/main/asciidoc/overview.adoc | 9 +++++---- .../kafka/config/KafkaBinderConfiguration.java | 15 +++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-cloud-stream-binder-kafka-docs/src/main/asciidoc/overview.adoc b/spring-cloud-stream-binder-kafka-docs/src/main/asciidoc/overview.adoc index 34386658f..0356783ee 100644 --- a/spring-cloud-stream-binder-kafka-docs/src/main/asciidoc/overview.adoc +++ b/spring-cloud-stream-binder-kafka-docs/src/main/asciidoc/overview.adoc @@ -273,8 +273,9 @@ For best results, we recommend using the most recent 0.10-compatible versions of ==== ==== Excluding Kafka broker jar from the classpath of the binder based application -If the inclusion of the Kafka broker is not desired at runtime, Kafka binder allows this particular dependency to be excluded from the binder so that it will not be part of the classpath. -However, topic creation will be disabled from the binder if this dependency is excluded. + +The Apache Kafka Binder uses the administrative utilities which are part of the Apache Kafka server library to create and reconfigure topics. +If the inclusion of the Apache Kafka server library and its dependencies is not necessary at runtime because the application will rely on the topics being configured administratively, the Kafka binder allows for Apache Kafka server dependency to be excluded from the application. If you use Kafka 10 dependencies as advised above, all you have to do is not to include the kafka broker dependency. If you use Kafka 0.9, then ensure that you exclude the kafka broker jar from the `spring-cloud-starter-stream-kafka` dependency as following. @@ -293,10 +294,10 @@ If you use Kafka 0.9, then ensure that you exclude the kafka broker jar from the ---- -If you exclude the kafka broker dependency and the topic is not present on the server, then Kafka broker will create the topic if auto topic creation is enabled on the server. +If you exclude the Apache Kafka server dependency and the topic is not present on the server, then the Apache Kafka broker will create the topic if auto topic creation is enabled on the server. Please keep in mind that if you are relying on this, then the Kafka server will use the default number of partitions and replication factors. On the other hand, if auto topic creation is disabled on the server, then care must be taken before running the application to create the topic with the desired number of partitions. -If you want to have full control over how partitions are allocated, then leave the default settings as they are, i.e. do not exclude the kafka broker jar and ensure that `spring.cloud.stream.kafka.binder.autoCreateTopics` is set to `true` which is the default. +If you want to have full control over how partitions are allocated, then leave the default settings as they are, i.e. do not exclude the kafka broker jar and ensure that `spring.cloud.stream.kafka.binder.autoCreateTopics` is set to `true`, which is the default. diff --git a/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java b/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java index 766de2e1b..15e5d750b 100644 --- a/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java +++ b/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java @@ -16,7 +16,6 @@ package org.springframework.cloud.stream.binder.kafka.config; -import kafka.admin.AdminUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.kafka.common.utils.AppInfoParser; @@ -102,30 +101,30 @@ public class KafkaBinderConfiguration { } @Bean(name = "adminUtilsOperation") - @Conditional(Kafka09Condition.class) + @Conditional(Kafka09Present.class) + @ConditionalOnClass(name = "kafka.admin.AdminUtils") public AdminUtilsOperation kafka09AdminUtilsOperation() { logger.info("AdminUtils selected: Kafka 0.9 AdminUtils"); return new Kafka09AdminUtilsOperation(); } @Bean(name = "adminUtilsOperation") - @Conditional(Kafka10Condition.class) + @Conditional(Kafka10Present.class) + @ConditionalOnClass(name = "kafka.admin.AdminUtils") public AdminUtilsOperation kafka10AdminUtilsOperation() { logger.info("AdminUtils selected: Kafka 0.10 AdminUtils"); return new Kafka10AdminUtilsOperation(); } - @ConditionalOnClass(AdminUtils.class) - static class Kafka10Condition implements Condition { + static class Kafka10Present implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { return AppInfoParser.getVersion().startsWith("0.10"); } } - - @ConditionalOnClass(AdminUtils.class) - static class Kafka09Condition implements Condition { + + static class Kafka09Present implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {