From 07d45d69c188ba5466d1f9cddab9af336d737943 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Tue, 22 Jul 2014 00:42:22 -0400 Subject: [PATCH] INTEXT-110: Update Kafka version to 0.8.1.1 JIRA: https://jira.spring.io/browse/INTEXT-110 Perform the necessary API Changes (Partioner interface in Kafka is now non-genericized for Keys - concrete Object is the new type for Key) Unit test updates for an internal Kafka class (MessageMetadata) Updates for the samples Kafka project to use the new M2 snapshot, Spring 4.0 Messaging changes, other build related minor changes, etc. --- samples/kafka/build.gradle | 11 ++------- samples/kafka/gradle.properties | 7 +++--- .../kafka/gradle/wrapper/gradle-wrapper.jar | Bin 45502 -> 50514 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 ++-- samples/kafka/gradlew | 6 ++--- .../kafka/outbound/CustomPartitioner.java | 4 ++-- .../kafka/outbound/OutboundRunner.java | 2 +- .../outbound/PartitionlessTransformer.java | 6 ++--- spring-integration-kafka/build.gradle | 2 +- .../kafka/support/DefaultPartitioner.java | 5 ++-- .../kafka/support/ProducerFactoryBean.java | 2 +- .../kafka/support/ProducerMetadata.java | 6 ++--- .../support/ConsumerConfigurationTests.java | 22 +++++++++++++++--- 13 files changed, 43 insertions(+), 34 deletions(-) diff --git a/samples/kafka/build.gradle b/samples/kafka/build.gradle index 5b02cbd..53a8879 100644 --- a/samples/kafka/build.gradle +++ b/samples/kafka/build.gradle @@ -37,15 +37,8 @@ repositories { } dependencies { - compile([ - "org.apache.avro:avro:1.7.3", - "org.apache.avro:avro-compiler:1.7.3" - ]) - compile "org.springframework:spring-beans:3.1.3.RELEASE" - compile "org.springframework:spring-context:3.1.3.RELEASE" - compile "org.springframework:spring-expression:3.1.3.RELEASE" - compile "org.springframework.integration:spring-integration-stream:2.2.0.RELEASE" - compile("org.springframework.integration:spring-integration-kafka:0.5.0.BUILD-SNAPSHOT") { + compile "org.springframework.integration:spring-integration-stream:$springIntegrationVersion" + compile("org.springframework.integration:spring-integration-kafka:$springIntegrationKafkaVersion") { exclude module: 'log4j' exclude module: 'jms' exclude module: 'jmxtools' diff --git a/samples/kafka/gradle.properties b/samples/kafka/gradle.properties index d03e972..d1a04db 100644 --- a/samples/kafka/gradle.properties +++ b/samples/kafka/gradle.properties @@ -1,7 +1,6 @@ -springVersion = 3.1.3.RELEASE -springIntegrationVersion = 2.2.0.RELEASE -springIntegrationKafkaVersion = 0.5.0.BUILD-SNAPSHOT -version = 0.5.0.BUILD-SNAPSHOT +springIntegrationVersion = 4.0.3.RELEASE +springIntegrationKafkaVersion = 1.0.0.BUILD-SNAPSHOT +version = 1.0.0.BUILD-SNAPSHOT diff --git a/samples/kafka/gradle/wrapper/gradle-wrapper.jar b/samples/kafka/gradle/wrapper/gradle-wrapper.jar index 7f1e239c8466c730b569575c494a89e6bb4c416a..667288ad6c2b3b87c990ece1267e56f0bcbf3622 100644 GIT binary patch delta 42007 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 delta 37162 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 diff --git a/samples/kafka/gradle/wrapper/gradle-wrapper.properties b/samples/kafka/gradle/wrapper/gradle-wrapper.properties index 238e92a..30eb5f3 100644 --- a/samples/kafka/gradle/wrapper/gradle-wrapper.properties +++ b/samples/kafka/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Oct 28 16:21:39 EDT 2013 +#Tue Jul 22 17:46:28 EEST 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip diff --git a/samples/kafka/gradlew b/samples/kafka/gradlew index e61422d..91a7e26 100755 --- a/samples/kafka/gradlew +++ b/samples/kafka/gradlew @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ############################################################################## ## @@ -61,9 +61,9 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" +cd "`dirname \"$PRG\"`/" >&- APP_HOME="`pwd -P`" -cd "$SAVED" +cd "$SAVED" >&- CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar diff --git a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/CustomPartitioner.java b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/CustomPartitioner.java index a6f3318..884bd58 100644 --- a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/CustomPartitioner.java +++ b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/CustomPartitioner.java @@ -22,14 +22,14 @@ import kafka.producer.Partitioner; * * This class is for internal use only and therefore is at default access level */ -class CustomPartitioner implements Partitioner { +class CustomPartitioner implements Partitioner { /** * Uses the key to calculate a partition bucket id for routing * the data to the appropriate broker partition * @return an integer between 0 and numPartitions-1 */ @Override - public int partition(final T key, final int numPartitions) { + public int partition(final Object key, final int numPartitions) { final String s = (String) key; final Integer i = Integer.parseInt(s); return i % numPartitions; diff --git a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/OutboundRunner.java b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/OutboundRunner.java index f285c8d..53e7fc0 100644 --- a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/OutboundRunner.java +++ b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/OutboundRunner.java @@ -18,9 +18,9 @@ package org.springframework.integration.samples.kafka.outbound; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.MessageChannel; import org.springframework.integration.samples.kafka.user.User; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.MessageChannel; public class OutboundRunner { private static final String CONFIG = "kafkaOutboundAdapterParserTests-context.xml"; diff --git a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/PartitionlessTransformer.java b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/PartitionlessTransformer.java index 5846ae6..c4a4379 100644 --- a/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/PartitionlessTransformer.java +++ b/samples/kafka/src/main/java/org/springframework/integration/samples/kafka/outbound/PartitionlessTransformer.java @@ -15,9 +15,9 @@ */ package org.springframework.integration.samples.kafka.outbound; -import org.springframework.integration.Message; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.transformer.Transformer; +import org.springframework.messaging.Message; import java.util.ArrayList; import java.util.Collection; @@ -36,13 +36,13 @@ public class PartitionlessTransformer implements Transformer { final Map>> origData = (Map>>) message.getPayload(); - final Map> nonPartitionedData = new HashMap>(); + final Map> nonPartitionedData = new HashMap<>(); for(final String topic : origData.keySet()) { final Map> partitionedData = origData.get(topic); final Collection> nonPartitionedDataFromTopic = partitionedData.values(); - final List mergedList = new ArrayList(); + final List mergedList = new ArrayList<>(); for (final List l : nonPartitionedDataFromTopic){ mergedList.addAll(l); diff --git a/spring-integration-kafka/build.gradle b/spring-integration-kafka/build.gradle index 153f8b1..a722984 100644 --- a/spring-integration-kafka/build.gradle +++ b/spring-integration-kafka/build.gradle @@ -19,7 +19,7 @@ sourceCompatibility = targetCompatibility = 1.6 ext { avroVersion = '1.7.6' jacocoVersion = '0.7.0.201403182114' - kafkaVersion = '0.8.0' + kafkaVersion = '0.8.1.1' metricsVersion = '2.2.0' scalaVersion = '2.10' springIntegrationVersion = '4.0.3.RELEASE' diff --git a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/DefaultPartitioner.java b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/DefaultPartitioner.java index 929ef89..007c116 100644 --- a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/DefaultPartitioner.java +++ b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/DefaultPartitioner.java @@ -24,14 +24,15 @@ import kafka.utils.Utils; * * This class is for internal use only and therefore is at default access level */ -class DefaultPartitioner implements Partitioner { +class DefaultPartitioner implements Partitioner { /** * Uses the key to calculate a partition bucket id for routing * the data to the appropriate broker partition * @return an integer between 0 and numPartitions-1 */ @Override - public int partition(final T key, final int numPartitions) { + public int partition(final Object key, final int numPartitions) { return Utils.abs(key.hashCode()) % numPartitions; } + } diff --git a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerFactoryBean.java b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerFactoryBean.java index b622154..2dfbe6c 100644 --- a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerFactoryBean.java +++ b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerFactoryBean.java @@ -71,7 +71,7 @@ public class ProducerFactoryBean implements FactoryBean> { LOGGER.info("Using producer properties => " + props); final ProducerConfig config = new ProducerConfig(props); final EventHandler eventHandler = new DefaultEventHandler(config, - producerMetadata.getPartitioner() == null ? new DefaultPartitioner() : producerMetadata.getPartitioner(), + producerMetadata.getPartitioner() == null ? new DefaultPartitioner() : producerMetadata.getPartitioner(), producerMetadata.getValueEncoder(), producerMetadata.getKeyEncoder(), new ProducerPool(config), new HashMap()); diff --git a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerMetadata.java b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerMetadata.java index e6dca25..fe6ba9a 100644 --- a/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerMetadata.java +++ b/spring-integration-kafka/src/main/java/org/springframework/integration/kafka/support/ProducerMetadata.java @@ -35,7 +35,7 @@ public class ProducerMetadata implements InitializingBean { private Class valueClassType; private final String topic; private String compressionCodec = "default"; - private Partitioner partitioner; + private Partitioner partitioner; private boolean async = false; private String batchNumMessages; @@ -94,11 +94,11 @@ public class ProducerMetadata implements InitializingBean { this.compressionCodec = compressionCodec; } - public Partitioner getPartitioner() { + public Partitioner getPartitioner() { return partitioner; } - public void setPartitioner(final Partitioner partitioner) { + public void setPartitioner(final Partitioner partitioner) { this.partitioner = partitioner; } diff --git a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/support/ConsumerConfigurationTests.java b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/support/ConsumerConfigurationTests.java index c23a2b6..1dab175 100644 --- a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/support/ConsumerConfigurationTests.java +++ b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/support/ConsumerConfigurationTests.java @@ -262,9 +262,25 @@ public class ConsumerConfigurationTests { topicStreamMap.put("topic1", 1); when(consumerMetadata.getTopicStreamMap()).thenReturn(topicStreamMap); when(messageLeftOverTracker.getCurrentCount()).thenReturn(3); - final MessageAndMetadata m1 = new MessageAndMetadata("key1", "value1", "topic1", 1, 1L); - final MessageAndMetadata m2 = new MessageAndMetadata("key2", "value2", "topic2", 1, 1L); - final MessageAndMetadata m3 = new MessageAndMetadata("key1", "value3", "topic3", 1, 1L); + + final MessageAndMetadata m1 = mock(MessageAndMetadata.class); + final MessageAndMetadata m2 = mock(MessageAndMetadata.class); + final MessageAndMetadata m3 = mock(MessageAndMetadata.class); + + when(m1.key()).thenReturn("key1"); + when(m1.message()).thenReturn("value1"); + when(m1.topic()).thenReturn("topic1"); + when(m1.partition()).thenReturn(1); + + when(m2.key()).thenReturn("key2"); + when(m2.message()).thenReturn("value2"); + when(m2.topic()).thenReturn("topic2"); + when(m2.partition()).thenReturn(1); + + when(m3.key()).thenReturn("key1"); + when(m3.message()).thenReturn("value3"); + when(m3.topic()).thenReturn("topic3"); + when(m3.partition()).thenReturn(1); final List> mList = new ArrayList>(); mList.add(m1);