diff --git a/pom.xml b/pom.xml
index 72430d831..cf1c22819 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,9 +12,9 @@
1.8
- 2.0.0.RELEASE
- 0.11.0.0
- 3.0.0.M2
+ 2.1.0.RELEASE
+ 3.0.0.RELEASE
+ 1.0.0
2.0.0.BUILD-SNAPSHOT
@@ -42,25 +42,6 @@
spring-cloud-stream
${spring-cloud-stream.version}
-
- org.apache.kafka
- kafka_2.11
- ${kafka.version}
-
-
- jline
- jline
-
-
- org.slf4j
- slf4j-log4j12
-
-
- log4j
- log4j
-
-
-
org.apache.kafka
kafka-clients
@@ -88,12 +69,6 @@
test
${spring-kafka.version}
-
- org.apache.kafka
- kafka_2.11
- test
- ${kafka.version}
-
org.apache.kafka
kafka-streams
@@ -105,6 +80,27 @@
+
+ org.apache.kafka
+ kafka_2.11
+ test
+ test
+ ${kafka.version}
+
+
+ jline
+ jline
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ log4j
+ log4j
+
+
+
diff --git a/spring-cloud-stream-binder-kafka-core/pom.xml b/spring-cloud-stream-binder-kafka-core/pom.xml
index 7bc68d357..c50b86b46 100644
--- a/spring-cloud-stream-binder-kafka-core/pom.xml
+++ b/spring-cloud-stream-binder-kafka-core/pom.xml
@@ -38,10 +38,6 @@
org.apache.kafka
kafka-clients
-
- org.apache.kafka
- kafka_2.11
-
org.springframework.integration
spring-integration-kafka
diff --git a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/AdminUtilsOperation.java b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/AdminUtilsOperation.java
deleted file mode 100644
index 4cb2b8bff..000000000
--- a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/AdminUtilsOperation.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cloud.stream.binder.kafka.admin;
-
-import java.util.Properties;
-
-import kafka.utils.ZkUtils;
-
-/**
- * API around {@link kafka.admin.AdminUtils} to support
- * various versions of Kafka brokers.
- *
- * Note: Implementations that support Kafka brokers other than 0.10, need to use
- * a possible strategy that involves reflection around {@link kafka.admin.AdminUtils}.
- *
- * @author Soby Chacko
- */
-public interface AdminUtilsOperation {
-
- /**
- * Invoke {@link kafka.admin.AdminUtils#addPartitions}
- *
- * @param zkUtils Zookeeper utils
- * @param topic name of the topic
- * @param numPartitions
- * @param replicaAssignmentStr
- * @param checkBrokerAvailable
- */
- void invokeAddPartitions(ZkUtils zkUtils, String topic, int numPartitions,
- String replicaAssignmentStr, boolean checkBrokerAvailable);
-
- /**
- * Invoke {@link kafka.admin.AdminUtils#fetchTopicMetadataFromZk}
- *
- * @param topic name
- * @param zkUtils zookeeper utils
- * @return error code
- */
- short errorCodeFromTopicMetadata(String topic, ZkUtils zkUtils);
-
- /**
- * Find partition size from Kafka broker using {@link kafka.admin.AdminUtils}
- *
- * @param topic name
- * @param zkUtils zookeeper utils
- * @return partition size
- */
- int partitionSize(String topic, ZkUtils zkUtils);
-
- /**
- * Inovke {@link kafka.admin.AdminUtils#createTopic}
- *
- * @param zkUtils zookeeper utils
- * @param topic name
- * @param partitions
- * @param replicationFactor
- * @param topicConfig
- */
- void invokeCreateTopic(ZkUtils zkUtils, String topic, int partitions,
- int replicationFactor, Properties topicConfig);
-}
diff --git a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/KafkaAdminUtilsOperation.java b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/KafkaAdminUtilsOperation.java
deleted file mode 100644
index 9cad3aa71..000000000
--- a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/admin/KafkaAdminUtilsOperation.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cloud.stream.binder.kafka.admin;
-
-import java.util.Properties;
-
-import kafka.admin.AdminUtils;
-import kafka.utils.ZkUtils;
-import org.apache.kafka.common.requests.MetadataResponse;
-
-/**
- * @author Soby Chacko
- */
-public class KafkaAdminUtilsOperation implements AdminUtilsOperation {
-
- public void invokeAddPartitions(ZkUtils zkUtils, String topic, int numPartitions,
- String replicaAssignmentStr, boolean checkBrokerAvailable) {
- AdminUtils.addPartitions(zkUtils, topic, numPartitions, replicaAssignmentStr, checkBrokerAvailable, null);
- }
-
- public short errorCodeFromTopicMetadata(String topic, ZkUtils zkUtils) {
-
- MetadataResponse.TopicMetadata topicMetadata = AdminUtils.fetchTopicMetadataFromZk(topic, zkUtils);
- return topicMetadata.error().code();
- }
-
- @SuppressWarnings("unchecked")
- public int partitionSize(String topic, ZkUtils zkUtils) {
-
- MetadataResponse.TopicMetadata topicMetadata = AdminUtils.fetchTopicMetadataFromZk(topic, zkUtils);
- return topicMetadata.partitionMetadata().size();
- }
-
- public void invokeCreateTopic(ZkUtils zkUtils, String topic, int partitions,
- int replicationFactor, Properties topicConfig) {
-
- AdminUtils.createTopic(zkUtils, topic, partitions, replicationFactor,
- topicConfig, null);
- }
-}
diff --git a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java
index 7659cf24a..4debb72c8 100644
--- a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java
+++ b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java
@@ -40,6 +40,8 @@ import org.springframework.util.StringUtils;
@ConfigurationProperties(prefix = "spring.cloud.stream.kafka.binder")
public class KafkaBinderConfigurationProperties {
+ private static final String DEFAULT_KAFKA_CONNECTION_STRING = "localhost:9092";
+
private final Transaction transaction = new Transaction();
@Autowired(required = false)
@@ -99,7 +101,7 @@ public class KafkaBinderConfigurationProperties {
private JaasLoginModuleConfiguration jaas;
/**
- * The bean name of a custom header mapper to use instead of a {@link DefaultKafkaHeaderMapper}.
+ * The bean name of a custom header mapper to use instead of a {@link org.springframework.kafka.support.DefaultKafkaHeaderMapper}.
*/
private String headerMapperBeanName;
@@ -115,6 +117,10 @@ public class KafkaBinderConfigurationProperties {
return toConnectionString(this.brokers, this.defaultBrokerPort);
}
+ public String getDefaultKafkaConnectionString() {
+ return DEFAULT_KAFKA_CONNECTION_STRING;
+ }
+
public String[] getHeaders() {
return this.headers;
}
diff --git a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java
index bab31e0c2..8f3a56a3c 100644
--- a/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java
+++ b/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java
@@ -17,21 +17,32 @@
package org.springframework.cloud.stream.binder.kafka.provisioning;
import java.util.Collection;
-import java.util.Properties;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
-import kafka.common.ErrorMapping;
-import kafka.utils.ZkUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.CreatePartitionsResult;
+import org.apache.kafka.clients.admin.CreateTopicsResult;
+import org.apache.kafka.clients.admin.DescribeTopicsResult;
+import org.apache.kafka.clients.admin.ListTopicsResult;
+import org.apache.kafka.clients.admin.NewPartitions;
+import org.apache.kafka.clients.admin.NewTopic;
+import org.apache.kafka.clients.admin.TopicDescription;
+import org.apache.kafka.common.KafkaFuture;
import org.apache.kafka.common.PartitionInfo;
-import org.apache.kafka.common.security.JaasUtils;
import org.springframework.beans.factory.InitializingBean;
+import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.cloud.stream.binder.BinderException;
import org.springframework.cloud.stream.binder.ExtendedConsumerProperties;
import org.springframework.cloud.stream.binder.ExtendedProducerProperties;
-import org.springframework.cloud.stream.binder.kafka.admin.AdminUtilsOperation;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaConsumerProperties;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaProducerProperties;
@@ -45,6 +56,7 @@ import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.Assert;
+import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
@@ -58,18 +70,30 @@ import org.springframework.util.StringUtils;
public class KafkaTopicProvisioner implements ProvisioningProvider,
ExtendedProducerProperties>, InitializingBean {
+ private static final int DEFAULT_OPERATION_TIMEOUT = 30;
+
private final Log logger = LogFactory.getLog(getClass());
- private final KafkaBinderConfigurationProperties configurationProperties;
+ private KafkaBinderConfigurationProperties configurationProperties;
- private final AdminUtilsOperation adminUtilsOperation;
+ private final AdminClient adminClient;
private RetryOperations metadataRetryOperations;
+ private int operationTimeout = DEFAULT_OPERATION_TIMEOUT;
+
public KafkaTopicProvisioner(KafkaBinderConfigurationProperties kafkaBinderConfigurationProperties,
- AdminUtilsOperation adminUtilsOperation) {
+ KafkaProperties kafkaProperties) {
+ Assert.isTrue(kafkaProperties != null, "KafkaProperties cannot be null");
+ Map adminClientProperties = kafkaProperties.buildAdminProperties();
+ String kafkaConnectionString = kafkaBinderConfigurationProperties.getKafkaConnectionString();
+
+ if (ObjectUtils.isEmpty(adminClientProperties.get(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG))
+ || !kafkaConnectionString.equals(kafkaBinderConfigurationProperties.getDefaultKafkaConnectionString())) {
+ adminClientProperties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaConnectionString);
+ }
this.configurationProperties = kafkaBinderConfigurationProperties;
- this.adminUtilsOperation = adminUtilsOperation;
+ this.adminClient = AdminClient.create(adminClientProperties);
}
/**
@@ -103,14 +127,20 @@ public class KafkaTopicProvisioner implements ProvisioningProvider> all = describeTopicsResult.all();
+
+ try {
+ Map topicDescriptions = all.get(operationTimeout, TimeUnit.SECONDS);
+ TopicDescription topicDescription = topicDescriptions.get(name);
+ int partitions = topicDescription.partitions().size();
+ return new KafkaProducerDestination(name, partitions);
+ }
+ catch (Exception e) {
+ throw new ProvisioningException("Problems encountered with partitions finding", e);
+ }
}
else {
return new KafkaProducerDestination(name);
@@ -127,30 +157,67 @@ public class KafkaTopicProvisioner implements ProvisioningProvider> all = describeTopicsResult.all();
+ try {
+ Map topicDescriptions = all.get(operationTimeout, TimeUnit.SECONDS);
+ TopicDescription topicDescription = topicDescriptions.get(name);
+ int partitions = topicDescription.partitions().size();
+ ConsumerDestination dlqTopic = createDlqIfNeedBe(name, group, properties, anonymous, partitions);
+ if (dlqTopic != null) return dlqTopic;
+ return new KafkaConsumerDestination(name, partitions);
+ }
+ catch (Exception e) {
+ throw new ProvisioningException("provisioning exception", e);
}
- return new KafkaConsumerDestination(name, partitions);
}
return new KafkaConsumerDestination(name);
}
- private void createTopicsIfAutoCreateEnabledAndAdminUtilsPresent(final String topicName, final int partitionCount,
- boolean tolerateLowerPartitionsOnBroker) {
- if (this.configurationProperties.isAutoCreateTopics() && adminUtilsOperation != null) {
+ private ConsumerDestination createDlqIfNeedBe(String name, String group,
+ ExtendedConsumerProperties properties,
+ boolean anonymous, int partitions) {
+ if (properties.getExtension().isEnableDlq() && !anonymous) {
+ String dlqTopic = StringUtils.hasText(properties.getExtension().getDlqName()) ?
+ properties.getExtension().getDlqName() : "error." + name + "." + group;
+ try {
+ createTopicAndPartitions(dlqTopic, partitions, properties.getExtension().isAutoRebalanceEnabled());
+ }
+ catch (Throwable throwable) {
+ if (throwable instanceof Error) {
+ throw (Error) throwable;
+ }
+ else {
+ throw new ProvisioningException("provisioning exception", throwable);
+ }
+ }
+ return new KafkaConsumerDestination(name, partitions, dlqTopic);
+ }
+ return null;
+ }
+
+ private void createTopic(String name, int partitionCount, boolean tolerateLowerPartitionsOnBroker) {
+ try {
+ createTopicIfNecessary(name, partitionCount, tolerateLowerPartitionsOnBroker);
+ }
+ catch (Throwable throwable) {
+ if (throwable instanceof Error) {
+ throw (Error) throwable;
+ }
+ else {
+ throw new ProvisioningException("provisioning exception", throwable);
+ }
+ }
+ }
+
+ private void createTopicIfNecessary(final String topicName, final int partitionCount,
+ boolean tolerateLowerPartitionsOnBroker) throws Throwable {
+ if (this.configurationProperties.isAutoCreateTopics() && adminClient != null) {
createTopicAndPartitions(topicName, partitionCount, tolerateLowerPartitionsOnBroker);
}
- else if (this.configurationProperties.isAutoCreateTopics() && adminUtilsOperation == null) {
+ else if (this.configurationProperties.isAutoCreateTopics() && adminClient == null) {
this.logger.warn("Auto creation of topics is enabled, but Kafka AdminUtils class is not present on the classpath. " +
"No topic will be created by the binder");
}
@@ -164,71 +231,68 @@ public class KafkaTopicProvisioner implements ProvisioningProvider> namesFutures = listTopicsResult.names();
- final ZkUtils zkUtils = ZkUtils.apply(this.configurationProperties.getZkConnectionString(),
- this.configurationProperties.getZkSessionTimeout(),
- this.configurationProperties.getZkConnectionTimeout(),
- JaasUtils.isZkSecurityEnabled());
- try {
- short errorCode = adminUtilsOperation.errorCodeFromTopicMetadata(topicName, zkUtils);
- if (errorCode == ErrorMapping.NoError()) {
- // only consider minPartitionCount for resizing if autoAddPartitions is true
- int effectivePartitionCount = this.configurationProperties.isAutoAddPartitions()
- ? Math.max(this.configurationProperties.getMinPartitionCount(), partitionCount)
- : partitionCount;
- int partitionSize = adminUtilsOperation.partitionSize(topicName, zkUtils);
-
- if (partitionSize < effectivePartitionCount) {
- if (this.configurationProperties.isAutoAddPartitions()) {
- adminUtilsOperation.invokeAddPartitions(zkUtils, topicName, effectivePartitionCount, null, false);
- }
- else if (tolerateLowerPartitionsOnBroker) {
- logger.warn("The number of expected partitions was: " + partitionCount + ", but "
- + partitionSize + (partitionSize > 1 ? " have " : " has ") + "been found instead."
- + "There will be " + (effectivePartitionCount - partitionSize) + " idle consumers");
- }
- else {
- throw new ProvisioningException("The number of expected partitions was: " + partitionCount + ", but "
- + partitionSize + (partitionSize > 1 ? " have " : " has ") + "been found instead."
- + "Consider either increasing the partition count of the topic or enabling " +
- "`autoAddPartitions`");
- }
+ Set names = namesFutures.get(operationTimeout, TimeUnit.SECONDS);
+ if (names.contains(topicName)) {
+ // only consider minPartitionCount for resizing if autoAddPartitions is true
+ int effectivePartitionCount = this.configurationProperties.isAutoAddPartitions()
+ ? Math.max(this.configurationProperties.getMinPartitionCount(), partitionCount)
+ : partitionCount;
+ DescribeTopicsResult describeTopicsResult = adminClient.describeTopics(Collections.singletonList(topicName));
+ KafkaFuture
-
- org.apache.kafka
- kafka_2.11
-
org.apache.kafka
kafka-clients
@@ -59,12 +55,6 @@
spring-kafka-test
test
-
- org.apache.kafka
- kafka_2.11
- test
- test
-
org.springframework.cloud
spring-cloud-stream-binder-test
diff --git a/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java b/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java
index 0c9db3b37..fe7979bec 100644
--- a/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java
+++ b/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java
@@ -609,26 +609,26 @@ public class KafkaMessageChannelBinder extends
}
}
- public static class TopicInformation {
+ static class TopicInformation {
private final String consumerGroup;
private final Collection partitionInfos;
- public TopicInformation(String consumerGroup, Collection partitionInfos) {
+ TopicInformation(String consumerGroup, Collection partitionInfos) {
this.consumerGroup = consumerGroup;
this.partitionInfos = partitionInfos;
}
- public String getConsumerGroup() {
+ String getConsumerGroup() {
return consumerGroup;
}
- public boolean isConsumerTopic() {
+ boolean isConsumerTopic() {
return consumerGroup != null;
}
- public Collection getPartitionInfos() {
+ Collection getPartitionInfos() {
return partitionInfos;
}
@@ -645,7 +645,7 @@ public class KafkaMessageChannelBinder extends
}
@SuppressWarnings("unchecked")
- public void sendToDlq(ConsumerRecord,?> consumerRecord, Headers headers) {
+ void sendToDlq(ConsumerRecord, ?> consumerRecord, Headers headers) {
K key = (K)consumerRecord.key();
V value = (V)consumerRecord.value();
ProducerRecord producerRecord = new ProducerRecord<>(this.dlqName, consumerRecord.partition(),
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 380c3b8ad..c11dfe585 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
@@ -27,16 +27,14 @@ import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.ByteArrayDeserializer;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
+import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.stream.binder.Binder;
import org.springframework.cloud.stream.binder.kafka.KafkaBinderHealthIndicator;
import org.springframework.cloud.stream.binder.kafka.KafkaBinderMetrics;
import org.springframework.cloud.stream.binder.kafka.KafkaMessageChannelBinder;
-import org.springframework.cloud.stream.binder.kafka.admin.AdminUtilsOperation;
-import org.springframework.cloud.stream.binder.kafka.admin.KafkaAdminUtilsOperation;
import org.springframework.cloud.stream.binder.kafka.properties.JaasLoginModuleConfiguration;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaExtendedBindingProperties;
@@ -81,12 +79,12 @@ public class KafkaBinderConfiguration {
@Autowired
private ApplicationContext context;
- @Autowired(required = false)
- private AdminUtilsOperation adminUtilsOperation;
+ @Autowired
+ private KafkaProperties kafkaProperties;
@Bean
KafkaTopicProvisioner provisioningProvider() {
- return new KafkaTopicProvisioner(this.configurationProperties, this.adminUtilsOperation);
+ return new KafkaTopicProvisioner(this.configurationProperties, this.kafkaProperties);
}
@Bean
@@ -127,12 +125,6 @@ public class KafkaBinderConfiguration {
return new KafkaBinderMetrics(kafkaMessageChannelBinder, configurationProperties);
}
- @Bean(name = "adminUtilsOperation")
- @ConditionalOnClass(name = "kafka.admin.AdminUtils")
- public AdminUtilsOperation kafka10AdminUtilsOperation() {
- return new KafkaAdminUtilsOperation();
- }
-
@Bean
public KafkaJaasLoginModuleInitializer jaasInitializer() throws IOException {
return new KafkaJaasLoginModuleInitializer();
diff --git a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationPropertiesTest.java b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationPropertiesTest.java
index ee40aaac7..b0c57421e 100644
--- a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationPropertiesTest.java
+++ b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationPropertiesTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.stream.binder.ExtendedConsumerProperties;
import org.springframework.cloud.stream.binder.ExtendedProducerProperties;
@@ -47,7 +48,8 @@ import static org.junit.Assert.assertTrue;
* @author Ilayaperumal Gopinathan
*/
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringBootTest(classes = { KafkaBinderConfiguration.class, KafkaBinderConfigurationPropertiesTest.class })
+@SpringBootTest(classes = { KafkaBinderConfiguration.class, KafkaAutoConfiguration.class,
+ KafkaBinderConfigurationPropertiesTest.class })
@TestPropertySource(locations = "classpath:binder-config.properties")
public class KafkaBinderConfigurationPropertiesTest {
diff --git a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationTest.java b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationTest.java
index 23ba781a9..9a0f633ff 100644
--- a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationTest.java
+++ b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderConfigurationTest.java
@@ -22,6 +22,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.stream.binder.kafka.config.KafkaBinderConfiguration;
import org.springframework.kafka.support.ProducerListener;
@@ -34,7 +35,9 @@ import static org.junit.Assert.assertNotNull;
* @author Ilayaperumal Gopinathan
*/
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringBootTest(classes = { KafkaBinderConfiguration.class, KafkaBinderConfigurationTest.class })
+@SpringBootTest(classes = { KafkaBinderConfiguration.class,
+ KafkaAutoConfiguration.class,
+ KafkaBinderConfigurationTest.class })
public class KafkaBinderConfigurationTest {
@Autowired
diff --git a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderTests.java b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderTests.java
index 06d506479..ef2ed0fec 100644
--- a/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderTests.java
+++ b/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/KafkaBinderTests.java
@@ -26,7 +26,6 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -34,11 +33,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import com.fasterxml.jackson.databind.ObjectMapper;
-
-import kafka.utils.ZKStringSerializer$;
-import kafka.utils.ZkUtils;
-
-import org.I0Itec.zkclient.ZkClient;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.CreateTopicsResult;
+import org.apache.kafka.clients.admin.DescribeTopicsResult;
+import org.apache.kafka.clients.admin.NewTopic;
+import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
@@ -46,6 +46,7 @@ import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
+import org.apache.kafka.common.KafkaFuture;
import org.apache.kafka.common.serialization.ByteArrayDeserializer;
import org.apache.kafka.common.serialization.ByteArraySerializer;
import org.apache.kafka.common.serialization.Deserializer;
@@ -61,6 +62,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.beans.DirectFieldAccessor;
+import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.cloud.stream.binder.Binder;
import org.springframework.cloud.stream.binder.BinderHeaders;
import org.springframework.cloud.stream.binder.Binding;
@@ -71,11 +73,10 @@ import org.springframework.cloud.stream.binder.PartitionCapableBinderTests;
import org.springframework.cloud.stream.binder.PartitionTestSupport;
import org.springframework.cloud.stream.binder.Spy;
import org.springframework.cloud.stream.binder.TestUtils;
-import org.springframework.cloud.stream.binder.kafka.admin.KafkaAdminUtilsOperation;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaConsumerProperties;
-import org.springframework.cloud.stream.binder.kafka.properties.KafkaConsumerProperties.StandardHeaders;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaProducerProperties;
+import org.springframework.cloud.stream.binder.kafka.provisioning.KafkaTopicProvisioner;
import org.springframework.cloud.stream.binder.kafka.utils.KafkaTopicUtils;
import org.springframework.cloud.stream.config.BindingProperties;
import org.springframework.cloud.stream.provisioning.ProvisioningException;
@@ -111,9 +112,6 @@ import org.springframework.messaging.SubscribableChannel;
import org.springframework.messaging.support.ErrorMessage;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.messaging.support.MessageBuilder;
-import org.springframework.retry.backoff.FixedBackOffPolicy;
-import org.springframework.retry.policy.SimpleRetryPolicy;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.Assert;
import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
@@ -134,6 +132,8 @@ import static org.mockito.Mockito.mock;
public class KafkaBinderTests extends
PartitionCapableBinderTests, ExtendedProducerProperties> {
+ private static final int DEFAULT_OPERATION_TIMEOUT = 30;
+
@Rule
public ExpectedException expectedProvisioningException = ExpectedException.none();
@@ -144,7 +144,7 @@ public class KafkaBinderTests extends
private KafkaTestBinder binder;
- private final KafkaAdminUtilsOperation adminUtilsOperation = new KafkaAdminUtilsOperation();
+ private AdminClient adminClient;
@Override
protected ExtendedConsumerProperties createConsumerProperties() {
@@ -173,11 +173,30 @@ public class KafkaBinderTests extends
protected KafkaTestBinder getBinder() {
if (binder == null) {
KafkaBinderConfigurationProperties binderConfiguration = createConfigurationProperties();
- binder = new KafkaTestBinder(binderConfiguration);
+ KafkaTopicProvisioner kafkaTopicProvisioner = new KafkaTopicProvisioner(binderConfiguration, new KafkaProperties());
+ try {
+ kafkaTopicProvisioner.afterPropertiesSet();
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ binder = new KafkaTestBinder(binderConfiguration, kafkaTopicProvisioner);
}
return binder;
}
+ private Binder getBinder(KafkaBinderConfigurationProperties kafkaBinderConfigurationProperties) {
+ KafkaTopicProvisioner provisioningProvider =
+ new KafkaTopicProvisioner(kafkaBinderConfigurationProperties, new KafkaProperties());
+ try {
+ provisioningProvider.afterPropertiesSet();
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return new KafkaTestBinder(kafkaBinderConfigurationProperties, provisioningProvider);
+ }
+
private KafkaBinderConfigurationProperties createConfigurationProperties() {
KafkaBinderConfigurationProperties binderConfiguration = new KafkaBinderConfigurationProperties();
BrokerAddress[] brokerAddresses = embeddedKafka.getBrokerAddresses();
@@ -195,36 +214,44 @@ public class KafkaBinderTests extends
return consumerFactory().createConsumer().partitionsFor(topic).size();
}
- private ZkUtils getZkUtils(KafkaBinderConfigurationProperties kafkaBinderConfigurationProperties) {
- final ZkClient zkClient = new ZkClient(kafkaBinderConfigurationProperties.getZkConnectionString(),
- kafkaBinderConfigurationProperties.getZkSessionTimeout(), kafkaBinderConfigurationProperties.getZkConnectionTimeout(),
- ZKStringSerializer$.MODULE$);
+ private void invokeCreateTopic(String topic, int partitions, int replicationFactor) throws Throwable {
- return new ZkUtils(zkClient, null, false);
- }
-
- private void invokeCreateTopic(ZkUtils zkUtils, String topic, int partitions, int replicationFactor, Properties topicConfig) {
- adminUtilsOperation.invokeCreateTopic(zkUtils, topic, partitions, replicationFactor, new Properties());
- }
-
- private int invokePartitionSize(String topic, ZkUtils zkUtils) {
- return adminUtilsOperation.partitionSize(topic, zkUtils);
+ NewTopic newTopic = new NewTopic(topic, partitions,
+ (short) replicationFactor);
+ CreateTopicsResult topics = adminClient.createTopics(Collections.singletonList(newTopic));
+ topics.all().get(DEFAULT_OPERATION_TIMEOUT, TimeUnit.SECONDS);
}
private String getKafkaOffsetHeaderKey() {
return KafkaHeaders.OFFSET;
}
- private Binder getBinder(KafkaBinderConfigurationProperties kafkaBinderConfigurationProperties) {
- return new KafkaTestBinder(kafkaBinderConfigurationProperties);
- }
-
@Before
public void init() {
String multiplier = System.getenv("KAFKA_TIMEOUT_MULTIPLIER");
if (multiplier != null) {
timeoutMultiplier = Double.parseDouble(multiplier);
}
+
+ BrokerAddress[] brokerAddresses = embeddedKafka.getBrokerAddresses();
+ List bAddresses = new ArrayList<>();
+ for (BrokerAddress bAddress : brokerAddresses) {
+ bAddresses.add(bAddress.toString());
+ }
+ String[] foo = new String[bAddresses.size()];
+
+ Map adminConfigs = new HashMap<>();
+ adminConfigs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bAddresses.toArray(foo)[0]);
+ adminClient = AdminClient.create(adminConfigs);
+ }
+
+ private int invokePartitionSize(String topic) throws Throwable {
+
+ DescribeTopicsResult describeTopicsResult = adminClient.describeTopics(Collections.singletonList(topic));
+ KafkaFuture
-
- org.apache.kafka
- kafka_2.11
-
org.apache.kafka
kafka-streams
@@ -46,36 +42,21 @@
test
- org.springframework.kafka
+ org.springframework.kafka
spring-kafka-test
org.apache.kafka
kafka_2.11
test
- test
-
-
- jline
- jline
-
-
- org.slf4j
- slf4j-log4j12
-
-
- log4j
- log4j
-
-
- log4j
- log4j
- 1.2.17
- test
-
+ log4j
+ log4j
+ 1.2.17
+ test
+
org.springframework.cloud
spring-cloud-stream-binder-test
diff --git a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/KStreamBoundElementFactory.java b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/KStreamBoundElementFactory.java
index 701326a4d..5296a8f92 100644
--- a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/KStreamBoundElementFactory.java
+++ b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/KStreamBoundElementFactory.java
@@ -19,8 +19,8 @@ package org.springframework.cloud.stream.binder.kstream;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.kafka.streams.KeyValue;
+import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.kstream.KStream;
-import org.apache.kafka.streams.kstream.KStreamBuilder;
import org.apache.kafka.streams.kstream.KeyValueMapper;
import org.springframework.aop.framework.ProxyFactory;
@@ -42,13 +42,13 @@ import org.springframework.util.StringUtils;
*/
public class KStreamBoundElementFactory extends AbstractBindingTargetFactory {
- private final KStreamBuilder kStreamBuilder;
+ private final StreamsBuilder kStreamBuilder;
private final BindingServiceProperties bindingServiceProperties;
private CompositeMessageConverterFactory compositeMessageConverterFactory;
- public KStreamBoundElementFactory(KStreamBuilder streamBuilder, BindingServiceProperties bindingServiceProperties,
+ public KStreamBoundElementFactory(StreamsBuilder streamBuilder, BindingServiceProperties bindingServiceProperties,
CompositeMessageConverterFactory compositeMessageConverterFactory) {
super(KStream.class);
this.bindingServiceProperties = bindingServiceProperties;
diff --git a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderConfiguration.java b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderConfiguration.java
index b12881dff..0c187bc2b 100644
--- a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderConfiguration.java
+++ b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderConfiguration.java
@@ -21,10 +21,8 @@ import org.apache.commons.logging.LogFactory;
import org.apache.kafka.streams.StreamsConfig;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.stream.binder.kafka.admin.AdminUtilsOperation;
-import org.springframework.cloud.stream.binder.kafka.admin.KafkaAdminUtilsOperation;
import org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties;
import org.springframework.cloud.stream.binder.kafka.provisioning.KafkaTopicProvisioner;
import org.springframework.cloud.stream.binder.kstream.KStreamBinder;
@@ -39,14 +37,14 @@ import org.springframework.context.annotation.Configuration;
@EnableConfigurationProperties(KStreamExtendedBindingProperties.class)
public class KStreamBinderConfiguration {
- @Autowired(required = false)
- private AdminUtilsOperation adminUtilsOperation;
-
private static final Log logger = LogFactory.getLog(KStreamBinderConfiguration.class);
+ @Autowired
+ private KafkaProperties kafkaProperties;
+
@Bean
public KafkaTopicProvisioner provisioningProvider(KafkaBinderConfigurationProperties binderConfigurationProperties) {
- return new KafkaTopicProvisioner(binderConfigurationProperties, adminUtilsOperation);
+ return new KafkaTopicProvisioner(binderConfigurationProperties, kafkaProperties);
}
@Bean
@@ -57,11 +55,4 @@ public class KStreamBinderConfiguration {
streamsConfig);
}
- @Bean(name = "adminUtilsOperation")
- @ConditionalOnClass(name = "kafka.admin.AdminUtils")
- public AdminUtilsOperation kafka10AdminUtilsOperation() {
- logger.info("AdminUtils selected: Kafka 0.10 AdminUtils");
- return new KafkaAdminUtilsOperation();
- }
-
}
diff --git a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderSupportAutoConfiguration.java b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderSupportAutoConfiguration.java
index c3d1080a7..4eae8c6b3 100644
--- a/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderSupportAutoConfiguration.java
+++ b/spring-cloud-stream-binder-kstream/src/main/java/org/springframework/cloud/stream/binder/kstream/config/KStreamBinderSupportAutoConfiguration.java
@@ -19,8 +19,8 @@ package org.springframework.cloud.stream.binder.kstream.config;
import java.util.Properties;
import org.apache.kafka.common.serialization.Serdes;
+import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
-import org.apache.kafka.streams.kstream.KStreamBuilder;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.UnsatisfiedDependencyException;
@@ -34,7 +34,7 @@ import org.springframework.cloud.stream.config.BindingServiceProperties;
import org.springframework.cloud.stream.converter.CompositeMessageConverterFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.annotation.KafkaStreamsDefaultConfiguration;
-import org.springframework.kafka.core.KStreamBuilderFactoryBean;
+import org.springframework.kafka.core.StreamsBuilderFactoryBean;
import org.springframework.util.ObjectUtils;
/**
@@ -48,18 +48,18 @@ public class KStreamBinderSupportAutoConfiguration {
return new KafkaBinderConfigurationProperties();
}
- @Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_KSTREAM_BUILDER_BEAN_NAME)
- public KStreamBuilderFactoryBean defaultKStreamBuilder(
+ @Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME)
+ public StreamsBuilderFactoryBean defaultKafkaStreamBuilder(
@Qualifier(KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME) ObjectProvider streamsConfigProvider) {
StreamsConfig streamsConfig = streamsConfigProvider.getIfAvailable();
if (streamsConfig != null) {
- KStreamBuilderFactoryBean kStreamBuilderFactoryBean = new KStreamBuilderFactoryBean(streamsConfig);
+ StreamsBuilderFactoryBean kStreamBuilderFactoryBean = new StreamsBuilderFactoryBean(streamsConfig);
kStreamBuilderFactoryBean.setPhase(Integer.MAX_VALUE - 500);
return kStreamBuilderFactoryBean;
}
else {
throw new UnsatisfiedDependencyException(KafkaStreamsDefaultConfiguration.class.getName(),
- KafkaStreamsDefaultConfiguration.DEFAULT_KSTREAM_BUILDER_BEAN_NAME, "streamsConfig",
+ KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME, "streamsConfig",
"There is no '" + KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME
+ "' StreamsConfig bean in the application context.\n");
}
@@ -79,19 +79,19 @@ public class KStreamBinderSupportAutoConfiguration {
}
@Bean
- public KStreamStreamListenerResultAdapter kStreamStreamListenerResultAdapter() {
+ public KStreamStreamListenerResultAdapter kafkaStreamStreamListenerResultAdapter() {
return new KStreamStreamListenerResultAdapter();
}
@Bean
- public KStreamListenerParameterAdapter kStreamListenerParameterAdapter(
+ public KStreamListenerParameterAdapter kafkaStreamListenerParameterAdapter(
CompositeMessageConverterFactory compositeMessageConverterFactory) {
return new KStreamListenerParameterAdapter(
compositeMessageConverterFactory.getMessageConverterForAllRegistered());
}
@Bean
- public KStreamBoundElementFactory kStreamBindableTargetFactory(KStreamBuilder kStreamBuilder,
+ public KStreamBoundElementFactory kafkaStreamBindableTargetFactory(StreamsBuilder kStreamBuilder,
BindingServiceProperties bindingServiceProperties,
CompositeMessageConverterFactory compositeMessageConverterFactory) {
return new KStreamBoundElementFactory(kStreamBuilder, bindingServiceProperties,
diff --git a/spring-cloud-stream-binder-kstream/src/test/java/org/springframework/cloud/stream/binder/kstream/KStreamInteractiveQueryIntegrationTests.java b/spring-cloud-stream-binder-kstream/src/test/java/org/springframework/cloud/stream/binder/kstream/KStreamInteractiveQueryIntegrationTests.java
index 775987371..38087dbae 100644
--- a/spring-cloud-stream-binder-kstream/src/test/java/org/springframework/cloud/stream/binder/kstream/KStreamInteractiveQueryIntegrationTests.java
+++ b/spring-cloud-stream-binder-kstream/src/test/java/org/springframework/cloud/stream/binder/kstream/KStreamInteractiveQueryIntegrationTests.java
@@ -42,8 +42,8 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
-import org.springframework.kafka.core.KStreamBuilderFactoryBean;
import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.kafka.core.StreamsBuilderFactoryBean;
import org.springframework.kafka.support.serializer.JsonSerde;
import org.springframework.kafka.test.rule.KafkaEmbedded;
import org.springframework.kafka.test.utils.KafkaTestUtils;
@@ -118,7 +118,7 @@ public class KStreamInteractiveQueryIntegrationTests {
public static class ProductCountApplication {
@Autowired
- private KStreamBuilderFactoryBean kStreamBuilderFactoryBean;
+ private StreamsBuilderFactoryBean kStreamBuilderFactoryBean;
@StreamListener("input")
@SendTo("output")
@@ -134,14 +134,14 @@ public class KStreamInteractiveQueryIntegrationTests {
}
@Bean
- public Foo foo(KStreamBuilderFactoryBean kStreamBuilderFactoryBean) {
+ public Foo foo(StreamsBuilderFactoryBean kStreamBuilderFactoryBean) {
return new Foo(kStreamBuilderFactoryBean);
}
static class Foo {
- KStreamBuilderFactoryBean kStreamBuilderFactoryBean;
+ StreamsBuilderFactoryBean kStreamBuilderFactoryBean;
- Foo(KStreamBuilderFactoryBean kStreamBuilderFactoryBean) {
+ Foo(StreamsBuilderFactoryBean kStreamBuilderFactoryBean) {
this.kStreamBuilderFactoryBean = kStreamBuilderFactoryBean;
}