From 55d5d940e560f2ffe43e199dc55b132f7c6fb044 Mon Sep 17 00:00:00 2001 From: Basil Hariri Date: Thu, 3 Jan 2019 15:38:02 -0800 Subject: [PATCH] Removing outdated Kafka samples. Now in new repo --- samples/kafka/akka-scala/README.md | 6 - samples/kafka/akka-scala/consumer/build.sbt | 7 - .../consumer/resources/application.conf | 16 --- .../consumer/scala/ConsumerMain.scala | 31 ----- samples/kafka/akka-scala/producer/build.sbt | 7 - .../producer/resources/application.conf | 13 -- .../producer/scala/ProducerMain.scala | 41 ------ samples/kafka/akka/README.md | 6 - samples/kafka/akka/consumer/pom.xml | 57 -------- .../com/example/app/AkkaTestConsumer.java | 61 --------- .../src/main/resources/application.conf | 16 --- samples/kafka/akka/producer/pom.xml | 57 -------- .../com/example/app/AkkaTestProducer.java | 59 -------- .../src/main/resources/application.conf | 13 -- samples/kafka/flink/README.md | 6 - samples/kafka/flink/consumer/pom.xml | 52 -------- .../com/example/app/FlinkTestConsumer.java | 31 ----- .../src/main/resources/consumer.config | 7 - samples/kafka/flink/producer/pom.xml | 52 -------- .../com/example/app/FlinkTestProducer.java | 46 ------- .../src/main/resources/producer.config | 6 - samples/kafka/mirror-maker/README.md | 6 - .../kafka/mirror-maker/mirror-eventhub.config | 8 -- .../mirror-maker/mirror-maker-graphic.PNG | Bin 40647 -> 0 bytes .../kafka/mirror-maker/source-kafka.config | 5 - samples/kafka/node/README.md | 6 - samples/kafka/node/consumer.js | 35 ----- samples/kafka/node/package-lock.json | 27 ---- samples/kafka/node/package.json | 15 --- samples/kafka/node/producer.js | 63 --------- samples/kafka/python/README.md | 6 - samples/kafka/python/consumer.py | 126 ------------------ samples/kafka/python/producer.py | 66 --------- samples/kafka/python/setup.sh | 20 --- samples/kafka/quickstart/README.md | 6 - samples/kafka/quickstart/consumer/pom.xml | 53 -------- .../java/com/example/app/TestConsumer.java | 18 --- .../com/example/app/TestConsumerThread.java | 70 ---------- .../src/main/resources/consumer.config | 6 - samples/kafka/quickstart/producer/pom.xml | 53 -------- .../com/example/app/TestDataReporter.java | 37 ----- .../java/com/example/app/TestProducer.java | 46 ------- .../src/main/resources/producer.config | 4 - 43 files changed, 1266 deletions(-) delete mode 100644 samples/kafka/akka-scala/README.md delete mode 100644 samples/kafka/akka-scala/consumer/build.sbt delete mode 100644 samples/kafka/akka-scala/consumer/resources/application.conf delete mode 100644 samples/kafka/akka-scala/consumer/scala/ConsumerMain.scala delete mode 100644 samples/kafka/akka-scala/producer/build.sbt delete mode 100644 samples/kafka/akka-scala/producer/resources/application.conf delete mode 100644 samples/kafka/akka-scala/producer/scala/ProducerMain.scala delete mode 100644 samples/kafka/akka/README.md delete mode 100644 samples/kafka/akka/consumer/pom.xml delete mode 100644 samples/kafka/akka/consumer/src/main/java/com/example/app/AkkaTestConsumer.java delete mode 100644 samples/kafka/akka/consumer/src/main/resources/application.conf delete mode 100644 samples/kafka/akka/producer/pom.xml delete mode 100644 samples/kafka/akka/producer/src/main/java/com/example/app/AkkaTestProducer.java delete mode 100644 samples/kafka/akka/producer/src/main/resources/application.conf delete mode 100644 samples/kafka/flink/README.md delete mode 100644 samples/kafka/flink/consumer/pom.xml delete mode 100644 samples/kafka/flink/consumer/src/main/java/com/example/app/FlinkTestConsumer.java delete mode 100644 samples/kafka/flink/consumer/src/main/resources/consumer.config delete mode 100644 samples/kafka/flink/producer/pom.xml delete mode 100644 samples/kafka/flink/producer/src/main/java/com/example/app/FlinkTestProducer.java delete mode 100644 samples/kafka/flink/producer/src/main/resources/producer.config delete mode 100644 samples/kafka/mirror-maker/README.md delete mode 100644 samples/kafka/mirror-maker/mirror-eventhub.config delete mode 100644 samples/kafka/mirror-maker/mirror-maker-graphic.PNG delete mode 100644 samples/kafka/mirror-maker/source-kafka.config delete mode 100644 samples/kafka/node/README.md delete mode 100644 samples/kafka/node/consumer.js delete mode 100644 samples/kafka/node/package-lock.json delete mode 100644 samples/kafka/node/package.json delete mode 100644 samples/kafka/node/producer.js delete mode 100644 samples/kafka/python/README.md delete mode 100644 samples/kafka/python/consumer.py delete mode 100644 samples/kafka/python/producer.py delete mode 100644 samples/kafka/python/setup.sh delete mode 100644 samples/kafka/quickstart/README.md delete mode 100644 samples/kafka/quickstart/consumer/pom.xml delete mode 100644 samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumer.java delete mode 100644 samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumerThread.java delete mode 100644 samples/kafka/quickstart/consumer/src/main/resources/consumer.config delete mode 100644 samples/kafka/quickstart/producer/pom.xml delete mode 100644 samples/kafka/quickstart/producer/src/main/java/com/example/app/TestDataReporter.java delete mode 100644 samples/kafka/quickstart/producer/src/main/java/com/example/app/TestProducer.java delete mode 100644 samples/kafka/quickstart/producer/src/main/resources/producer.config diff --git a/samples/kafka/akka-scala/README.md b/samples/kafka/akka-scala/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/akka-scala/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/akka-scala/consumer/build.sbt b/samples/kafka/akka-scala/consumer/build.sbt deleted file mode 100644 index c5942704..00000000 --- a/samples/kafka/akka-scala/consumer/build.sbt +++ /dev/null @@ -1,7 +0,0 @@ -name := "scala-event-hubs-consumer" - -version := "0.1" - -scalaVersion := "2.12.6" - -libraryDependencies += "com.typesafe.akka" %% "akka-stream-kafka" % "0.21.1" \ No newline at end of file diff --git a/samples/kafka/akka-scala/consumer/resources/application.conf b/samples/kafka/akka-scala/consumer/resources/application.conf deleted file mode 100644 index fc06c1af..00000000 --- a/samples/kafka/akka-scala/consumer/resources/application.conf +++ /dev/null @@ -1,16 +0,0 @@ -akka.kafka.consumer { - #Akka Kafka consumer properties defined here - wakeup-timeout=60s - - # Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig - # defined in this configuration section. - kafka-clients { - request.timeout.ms=60000 - group.id=akka-example-consumer - - bootstrap.servers="{YOUR.EVENTHUBS.FQDN}:9093" - sasl.mechanism=PLAIN - security.protocol=SASL_SSL - sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"$ConnectionString\" password=\"{YOUR.EVENTHUBS.CONNECTION.STRING}\";" - } -} \ No newline at end of file diff --git a/samples/kafka/akka-scala/consumer/scala/ConsumerMain.scala b/samples/kafka/akka-scala/consumer/scala/ConsumerMain.scala deleted file mode 100644 index bd23b71e..00000000 --- a/samples/kafka/akka-scala/consumer/scala/ConsumerMain.scala +++ /dev/null @@ -1,31 +0,0 @@ -import akka.actor.ActorSystem -import akka.kafka.scaladsl.Consumer -import akka.kafka.{ConsumerSettings, Subscriptions} -import akka.stream.ActorMaterializer -import akka.stream.scaladsl.Sink -import org.apache.kafka.common.serialization.{ByteArrayDeserializer, StringDeserializer} - -import scala.concurrent.Future -import scala.language.postfixOps - -object ConsumerMain { - - def main(args: Array[String]): Unit = { - implicit val system:ActorSystem = ActorSystem.apply("akka-stream-kafka") - implicit val materializer:ActorMaterializer = ActorMaterializer() - - // grab our settings from the resources/application.conf file - val consumerSettings = ConsumerSettings(system, new ByteArrayDeserializer, new StringDeserializer) - - // our topic to subscribe to for messages - val topic = "test" - - // listen to our topic with our settings, until the program is exited - Consumer.plainSource(consumerSettings, Subscriptions.topics(topic)) - .mapAsync(1) ( msg => { - // print out our message once it's received - println(s"Message Received : ${msg.timestamp} - ${msg.value}") - Future.successful(msg) - }).runWith(Sink.ignore) - } -} \ No newline at end of file diff --git a/samples/kafka/akka-scala/producer/build.sbt b/samples/kafka/akka-scala/producer/build.sbt deleted file mode 100644 index 174bbc4f..00000000 --- a/samples/kafka/akka-scala/producer/build.sbt +++ /dev/null @@ -1,7 +0,0 @@ -name := "scala-event-hubs-producer" - -version := "0.1" - -scalaVersion := "2.12.6" - -libraryDependencies += "com.typesafe.akka" %% "akka-stream-kafka" % "0.21.1" \ No newline at end of file diff --git a/samples/kafka/akka-scala/producer/resources/application.conf b/samples/kafka/akka-scala/producer/resources/application.conf deleted file mode 100644 index 473f9247..00000000 --- a/samples/kafka/akka-scala/producer/resources/application.conf +++ /dev/null @@ -1,13 +0,0 @@ -akka.kafka.producer { - #Akka kafka producer properties can be defined here - - - # Properties defined by org.apache.kafka.clients.producer.ProducerConfig - # can be defined in this configuration section. - kafka-clients { - bootstrap.servers="{YOUR.EVENTHUBS.FQDN}:9093" - sasl.mechanism=PLAIN - security.protocol=SASL_SSL - sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"$ConnectionString\" password=\"{YOUR.EVENTHUBS.CONNECTION.STRING}\";" - } -} \ No newline at end of file diff --git a/samples/kafka/akka-scala/producer/scala/ProducerMain.scala b/samples/kafka/akka-scala/producer/scala/ProducerMain.scala deleted file mode 100644 index 770667b4..00000000 --- a/samples/kafka/akka-scala/producer/scala/ProducerMain.scala +++ /dev/null @@ -1,41 +0,0 @@ -import java.util.concurrent.TimeUnit.SECONDS - -import akka.actor.ActorSystem -import akka.kafka.ProducerSettings -import akka.kafka.scaladsl.Producer -import akka.stream.scaladsl.Source -import akka.stream.{ActorMaterializer, ThrottleMode} -import org.apache.kafka.clients.producer.ProducerRecord -import org.apache.kafka.common.serialization.{ByteArraySerializer, StringSerializer} - -import scala.concurrent.duration.FiniteDuration -import scala.language.postfixOps - -object ProducerMain { - - def main(args: Array[String]): Unit = { - implicit val system: ActorSystem = ActorSystem.apply("akka-stream-kafka") - implicit val materializer: ActorMaterializer = ActorMaterializer() - - // grab our settings from the resources/application.conf file - val producerSettings = ProducerSettings(system, new ByteArraySerializer, new StringSerializer) - - // topic to send the message to on event hubs - val topic = "sampleTopic" - - // loop until the program reaches 100 - Source(1 to 100) - .throttle(1, FiniteDuration(1, SECONDS), 1, ThrottleMode.Shaping) - .map(num => { - //construct our message here - val message = s"Akka Scala Producer Message # ${num}" - println(s"Message sent to topic - $topic - $message") - new ProducerRecord[Array[Byte], String](topic, message.getBytes, message.toString) - }) - .runWith(Producer.plainSink(producerSettings)) - .onComplete(_ => { - println("All messages sent!") - system.terminate() - })(scala.concurrent.ExecutionContext.global) - } -} \ No newline at end of file diff --git a/samples/kafka/akka/README.md b/samples/kafka/akka/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/akka/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/akka/consumer/pom.xml b/samples/kafka/akka/consumer/pom.xml deleted file mode 100644 index 78809c59..00000000 --- a/samples/kafka/akka/consumer/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - com.example.app - event-hubs-kafka-akka-consumer - jar - 1.0-SNAPSHOT - - UTF-8 - UTF-8 - - - - com.typesafe.akka - akka-actor_2.12 - 2.5.16 - - - com.typesafe.akka - akka-stream-kafka_2.12 - 0.20 - - - com.typesafe.akka - akka-testkit_2.12 - 2.5.16 - - - junit - junit - 4.12 - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - diff --git a/samples/kafka/akka/consumer/src/main/java/com/example/app/AkkaTestConsumer.java b/samples/kafka/akka/consumer/src/main/java/com/example/app/AkkaTestConsumer.java deleted file mode 100644 index 7d5dfd4d..00000000 --- a/samples/kafka/akka/consumer/src/main/java/com/example/app/AkkaTestConsumer.java +++ /dev/null @@ -1,61 +0,0 @@ -import akka.Done; -import akka.actor.ActorSystem; -import akka.kafka.*; -import akka.stream.ActorMaterializer; -import akka.stream.Materializer; -import akka.stream.javadsl.*; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.apache.kafka.common.serialization.ByteArrayDeserializer; -import org.apache.kafka.common.serialization.StringDeserializer; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; -import java.util.concurrent.atomic.AtomicLong; - -abstract class AbstractConsumer { - protected final ActorSystem system = ActorSystem.create("example"); - - protected final Materializer materializer = ActorMaterializer.create(system); - - // Consumer settings - protected ConsumerSettings consumerSettings = ConsumerSettings - .create(system, new ByteArrayDeserializer(), new StringDeserializer()); - - // DB - static class DB { - private final AtomicLong offset = new AtomicLong(); - - public CompletionStage save(ConsumerRecord record) { - System.out.println("DB.save: " + record.value()); - offset.set(record.offset()); - return CompletableFuture.completedFuture(Done.getInstance()); - } - - public CompletionStage loadOffset() { - return CompletableFuture.completedFuture(offset.get()); - } - - public CompletionStage update(String data) { - System.out.println(data); - return CompletableFuture.completedFuture(Done.getInstance()); - } - } -} - - -public class AkkaTestConsumer extends AbstractConsumer { - - private final static String TOPIC = "test"; - - public static void main(String[] args) { - new AkkaTestConsumer().demo(); - } - - //Consumes each message from TOPIC at least once - public void demo() { - final DB db = new DB(); - akka.kafka.javadsl.Consumer.committableSource(consumerSettings, Subscriptions.topics(TOPIC)) - .mapAsync(1, msg -> db.update(msg.record().value()).thenApply(done -> msg)) - .mapAsync(1, msg -> msg.committableOffset().commitJavadsl()) - .runWith(Sink.foreach(p -> System.out.println(p)), materializer); - } -} diff --git a/samples/kafka/akka/consumer/src/main/resources/application.conf b/samples/kafka/akka/consumer/src/main/resources/application.conf deleted file mode 100644 index 30256678..00000000 --- a/samples/kafka/akka/consumer/src/main/resources/application.conf +++ /dev/null @@ -1,16 +0,0 @@ -akka.kafka.consumer { - #Akka Kafka consumer properties defined here - wakeup-timeout=60s - - # Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig - # defined in this configuration section. - kafka-clients { - request.timeout.ms=60000 - group.id=akka-example-consumer - - bootstrap.servers="{YOUR.EVENTHUBS.FQDN}:9093" - sasl.mechanism=PLAIN - security.protocol=SASL_SSL - sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"$ConnectionString\" password=\"{YOUR.EVENTHUBS.CONNECTION.STRING}\";" - } -} diff --git a/samples/kafka/akka/producer/pom.xml b/samples/kafka/akka/producer/pom.xml deleted file mode 100644 index 55219297..00000000 --- a/samples/kafka/akka/producer/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - com.example.app - event-hubs-kafka-akka-producer - jar - 1.0-SNAPSHOT - - UTF-8 - UTF-8 - - - - com.typesafe.akka - akka-actor_2.12 - 2.5.16 - - - com.typesafe.akka - akka-stream-kafka_2.12 - 0.20 - - - com.typesafe.akka - akka-testkit_2.12 - 2.5.16 - - - junit - junit - 4.12 - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - diff --git a/samples/kafka/akka/producer/src/main/java/com/example/app/AkkaTestProducer.java b/samples/kafka/akka/producer/src/main/java/com/example/app/AkkaTestProducer.java deleted file mode 100644 index 6e6b1b2f..00000000 --- a/samples/kafka/akka/producer/src/main/java/com/example/app/AkkaTestProducer.java +++ /dev/null @@ -1,59 +0,0 @@ -import akka.Done; -import akka.actor.ActorSystem; -import akka.kafka.ProducerSettings; -import akka.kafka.javadsl.Producer; -import akka.stream.ActorMaterializer; -import akka.stream.Materializer; -import akka.stream.javadsl.Source; -import akka.stream.StreamLimitReachedException; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.common.serialization.ByteArraySerializer; -import org.apache.kafka.common.serialization.StringSerializer; -import java.util.concurrent.CompletionStage; - -abstract class AbstractProducer { - protected final ActorSystem system = ActorSystem.create("example"); - - protected final Materializer materializer = ActorMaterializer.create(system); - - protected final ProducerSettings producerSettings = ProducerSettings - .create(system, new ByteArraySerializer(), new StringSerializer()); - - protected final KafkaProducer kafkaProducer = producerSettings.createKafkaProducer(); - - protected final static int RANGE = 100; - - protected void terminateWhenDone(CompletionStage result) { - result.exceptionally(e -> { - if (e instanceof StreamLimitReachedException){ - System.out.println("Sent " + RANGE + " messages!"); - system.terminate(); - } - else - system.log().error(e, e.getMessage()); - return Done.getInstance(); - }) - .thenAccept(d -> system.terminate()); - } -} - -public class AkkaTestProducer extends AbstractProducer { - - private static final String TOPIC = "test"; - - public static void main(String[] args) { - new AkkaTestProducer().demo(); - } - - public void demo() { - System.out.println("Sending"); - // Sends integer 1-100 to Kafka topic "test" - CompletionStage done = Source - .range(1, RANGE) - .limit(RANGE - 1) - .map(n -> n.toString()).map(elem -> new ProducerRecord(TOPIC, elem)) - .runWith(Producer.plainSink(producerSettings, kafkaProducer), materializer); - terminateWhenDone(done); - } -} diff --git a/samples/kafka/akka/producer/src/main/resources/application.conf b/samples/kafka/akka/producer/src/main/resources/application.conf deleted file mode 100644 index 17de5436..00000000 --- a/samples/kafka/akka/producer/src/main/resources/application.conf +++ /dev/null @@ -1,13 +0,0 @@ -akka.kafka.producer { - #Akka kafka producer properties can be defined here - - - # Properties defined by org.apache.kafka.clients.producer.ProducerConfig - # can be defined in this configuration section. - kafka-clients { - bootstrap.servers="{YOUR.EVENTHUBS.FQDN}:9093" - sasl.mechanism=PLAIN - security.protocol=SASL_SSL - sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"$ConnectionString\" password=\"{YOUR.EVENTHUBS.CONNECTION.STRING}\";" - } -} diff --git a/samples/kafka/flink/README.md b/samples/kafka/flink/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/flink/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/flink/consumer/pom.xml b/samples/kafka/flink/consumer/pom.xml deleted file mode 100644 index 7e6ede2f..00000000 --- a/samples/kafka/flink/consumer/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - com.example.app - event-hubs-kafka-flink-consumer - jar - 1.0-SNAPSHOT - - UTF-8 - UTF-8 - - - - org.apache.flink - flink-connector-kafka-0.11_2.11 - 1.4.2 - - - org.apache.flink - flink-java - 1.4.2 - - - org.apache.flink - flink-streaming-java_2.11 - 1.4.2 - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - diff --git a/samples/kafka/flink/consumer/src/main/java/com/example/app/FlinkTestConsumer.java b/samples/kafka/flink/consumer/src/main/java/com/example/app/FlinkTestConsumer.java deleted file mode 100644 index 346487ef..00000000 --- a/samples/kafka/flink/consumer/src/main/java/com/example/app/FlinkTestConsumer.java +++ /dev/null @@ -1,31 +0,0 @@ -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; //Kafka v0.11.0.0 -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.Properties; - -public class FlinkTestConsumer { - - private static final String TOPIC = "test"; - private static final String FILE_PATH = "src/main/resources/consumer.config"; - - public static void main(String... args) { - try { - //Load properties from config file - Properties properties = new Properties(); - properties.load(new FileReader(FILE_PATH)); - - final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - DataStream stream = env.addSource(new FlinkKafkaConsumer011(TOPIC, new SimpleStringSchema(), properties)); - stream.print(); - env.execute("Testing flink consumer"); - - } catch(FileNotFoundException e){ - System.out.println("FileNoteFoundException: " + e); - } catch (Exception e){ - System.out.println("Failed with exception " + e); - } - } -} diff --git a/samples/kafka/flink/consumer/src/main/resources/consumer.config b/samples/kafka/flink/consumer/src/main/resources/consumer.config deleted file mode 100644 index cd2518c6..00000000 --- a/samples/kafka/flink/consumer/src/main/resources/consumer.config +++ /dev/null @@ -1,7 +0,0 @@ -bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093 -group.id=FlinkExampleConsumer -request.timeout.ms=60000 - -sasl.mechanism=PLAIN -security.protocol=SASL_SSL -sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}"; diff --git a/samples/kafka/flink/producer/pom.xml b/samples/kafka/flink/producer/pom.xml deleted file mode 100644 index 1668bf3f..00000000 --- a/samples/kafka/flink/producer/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - com.example.app - event-hubs-kafka-flink-producer - jar - 1.0-SNAPSHOT - - UTF-8 - UTF-8 - - - - org.apache.flink - flink-connector-kafka-0.11_2.11 - 1.4.2 - - - org.apache.flink - flink-java - 1.4.2 - - - org.apache.flink - flink-streaming-java_2.11 - 1.4.2 - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - diff --git a/samples/kafka/flink/producer/src/main/java/com/example/app/FlinkTestProducer.java b/samples/kafka/flink/producer/src/main/java/com/example/app/FlinkTestProducer.java deleted file mode 100644 index 45c3a24f..00000000 --- a/samples/kafka/flink/producer/src/main/java/com/example/app/FlinkTestProducer.java +++ /dev/null @@ -1,46 +0,0 @@ -import org.apache.flink.api.common.functions.MapFunction; -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; //v0.11.0.0 -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.Properties; - -public class FlinkTestProducer { - - private static final String TOPIC = "test"; - private static final String FILE_PATH = "src/main/resources/producer.config"; - - public static void main(String... args) { - try { - Properties properties = new Properties(); - properties.load(new FileReader(FILE_PATH)); - - final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - DataStream stream = createStream(env); - FlinkKafkaProducer011 myProducer = new FlinkKafkaProducer011<>( - TOPIC, - new SimpleStringSchema(), // serialization schema - properties); - - stream.addSink(myProducer); - env.execute("Testing flink print"); - - } catch(FileNotFoundException e){ - System.out.println("FileNotFoundException: " + e); - } catch (Exception e) { - System.out.println("Failed with exception:: " + e); - } - } - - public static DataStream createStream(StreamExecutionEnvironment env){ - return env.generateSequence(0, 200) - .map(new MapFunction() { - @Override - public String map(Long in) { - return "FLINK PRODUCE " + in; - } - }); - } -} diff --git a/samples/kafka/flink/producer/src/main/resources/producer.config b/samples/kafka/flink/producer/src/main/resources/producer.config deleted file mode 100644 index eb9c2a9d..00000000 --- a/samples/kafka/flink/producer/src/main/resources/producer.config +++ /dev/null @@ -1,6 +0,0 @@ -bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093 -client.id=FlinkExampleProducer - -sasl.mechanism=PLAIN -security.protocol=SASL_SSL -sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}"; diff --git a/samples/kafka/mirror-maker/README.md b/samples/kafka/mirror-maker/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/mirror-maker/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/mirror-maker/mirror-eventhub.config b/samples/kafka/mirror-maker/mirror-eventhub.config deleted file mode 100644 index 21edeb27..00000000 --- a/samples/kafka/mirror-maker/mirror-eventhub.config +++ /dev/null @@ -1,8 +0,0 @@ -# Event Hubs Kafka endpoint -bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093 -client.id=mirror_maker_producer - -# Event Hubs requires secure communication -sasl.mechanism=PLAIN -security.protocol=SASL_SSL -sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}"; \ No newline at end of file diff --git a/samples/kafka/mirror-maker/mirror-maker-graphic.PNG b/samples/kafka/mirror-maker/mirror-maker-graphic.PNG deleted file mode 100644 index de3a6f38bf722879945026cdb8092ae2d354aa30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40647 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

Up%X8yivfWNn?&luvN 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 SkqgjgU%7bg0!q!|_WuKOu~g9j diff --git a/samples/kafka/mirror-maker/source-kafka.config b/samples/kafka/mirror-maker/source-kafka.config deleted file mode 100644 index f7231393..00000000 --- a/samples/kafka/mirror-maker/source-kafka.config +++ /dev/null @@ -1,5 +0,0 @@ -#Simple Kafka set up -bootstrap.servers={SOURCE.KAFKA.IP.ADDRESS1}:{SOURCE.KAFKA.PORT1},{SOURCE.KAFKA.IP.ADDRESS2}:{SOURCE.KAFKA.PORT2},etc -client.id=mirror_maker_consumer -group.id=example-mirrormaker-group -exclude.internal.topics=true \ No newline at end of file diff --git a/samples/kafka/node/README.md b/samples/kafka/node/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/node/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/node/consumer.js b/samples/kafka/node/consumer.js deleted file mode 100644 index a5cc43f6..00000000 --- a/samples/kafka/node/consumer.js +++ /dev/null @@ -1,35 +0,0 @@ -var Transform = require('stream').Transform; -var Kafka = require('node-rdkafka'); - -var stream = Kafka.KafkaConsumer.createReadStream({ - 'metadata.broker.list': 'EVENTHUB_FQDN', - 'group.id': 'EVENTHUB_CONSUMER_GROUP', //The default for EventHubs is $Default - 'socket.keepalive.enable': true, - 'enable.auto.commit': false, - 'security.protocol': 'SASL_SSL', - 'sasl.mechanisms': 'PLAIN', - 'sasl.username': '$ConnectionString', - 'sasl.password': 'EVENTHUB_CONNECTION_STRING' - -}, {}, { - topics: 'test', - waitInterval: 0, - objectMode: false - }); - -stream.on('error', function (err) { - if (err) console.log(err); - process.exit(1); -}); - -stream - .pipe(process.stdout); - -stream.on('error', function (err) { - console.log(err); - process.exit(1); -}); - -stream.consumer.on('event.error', function (err) { - console.log(err); -}) \ No newline at end of file diff --git a/samples/kafka/node/package-lock.json b/samples/kafka/node/package-lock.json deleted file mode 100644 index 4c47f69c..00000000 --- a/samples/kafka/node/package-lock.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "kafka_node", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "node-rdkafka": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/node-rdkafka/-/node-rdkafka-2.3.3.tgz", - "integrity": "sha512-2J54zC9+Zj0iRQttmQs1Ubv8aHhmh04XjP3vk39uco7l6tp8BYYHG4XRsoqKOGGKjBLctGpFHr9g97WBE1pTbg==", - "requires": { - "bindings": "1.3.0", - "nan": "2.10.0" - } - } - } -} diff --git a/samples/kafka/node/package.json b/samples/kafka/node/package.json deleted file mode 100644 index 9feabaa6..00000000 --- a/samples/kafka/node/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "kafka_node", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "node-rdkafka": "^2.3.3" - } -} diff --git a/samples/kafka/node/producer.js b/samples/kafka/node/producer.js deleted file mode 100644 index faa3c87f..00000000 --- a/samples/kafka/node/producer.js +++ /dev/null @@ -1,63 +0,0 @@ -var Kafka = require('node-rdkafka'); - -var producer = new Kafka.Producer({ - //'debug' : 'all', - 'metadata.broker.list': 'EVENTHUB_FQDN', - 'dr_cb': true, //delivery report callback - 'security.protocol': 'SASL_SSL', - 'sasl.mechanisms': 'PLAIN', - 'sasl.username': '$ConnectionString', - 'sasl.password': 'EVENTHUB_CONNECTION_STRING' -}); - -var topicName = 'test'; - -//logging debug messages, if debug is enabled -producer.on('event.log', function(log) { - console.log(log); -}); - -//logging all errors -producer.on('event.error', function(err) { - console.error('Error from producer'); - console.error(err); -}); - -//counter to stop this sample after maxMessages are sent -var counter = 0; -var maxMessages = 10; - -producer.on('delivery-report', function(err, report) { - console.log('delivery-report: ' + JSON.stringify(report)); - counter++; -}); - -//Wait for the ready event before producing -producer.on('ready', function(arg) { - console.log('producer ready.' + JSON.stringify(arg)); - - for (var i = 0; i < maxMessages; i++) { - var value = new Buffer(`{"name" : "person${i}"}"`); - var key = "key-"+i; - // if partition is set to -1, librdkafka will use the default partitioner - var partition = -1; - producer.produce(topicName, partition, value, key); - } - - //need to keep polling for a while to ensure the delivery reports are received - var pollLoop = setInterval(function() { - producer.poll(); - if (counter === maxMessages) { - clearInterval(pollLoop); - producer.disconnect(); - } - }, 1000); - -}); - -producer.on('disconnected', function(arg) { - console.log('producer disconnected. ' + JSON.stringify(arg)); -}); - -//starting the producer -producer.connect(); diff --git a/samples/kafka/python/README.md b/samples/kafka/python/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/python/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/python/consumer.py b/samples/kafka/python/consumer.py deleted file mode 100644 index 7ecb5310..00000000 --- a/samples/kafka/python/consumer.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2016 Confluent Inc. -# -# Modified for use with Azure Event Hubs for Apache Kafka Ecosystems -# 06/18/2018 -# -# 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. -# - -# -# Example high-level Kafka 0.9 balanced Consumer -# -from confluent_kafka import Consumer, KafkaException, KafkaError -import sys -import getopt -import json -import logging -from pprint import pformat - - -def stats_cb(stats_json_str): - stats_json = json.loads(stats_json_str) - print('\nKAFKA Stats: {}\n'.format(pformat(stats_json))) - - -def print_usage_and_exit(program_name): - sys.stderr.write('Usage: %s [options..] ..\n' % program_name) - options = ''' - Options: - -T Enable client statistics at specified interval (ms) -''' - sys.stderr.write(options) - sys.exit(1) - - -if __name__ == '__main__': - optlist, argv = getopt.getopt(sys.argv[1:], 'T:') - if len(argv) < 2: - print_usage_and_exit(sys.argv[0]) - - group = argv[0] - topics = argv[1:] - # Consumer configuration - # See https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md - conf = { - 'bootstrap.servers': '{YOUR.EVENTHUB.FQDN}:9093', - 'security.protocol' : 'SASL_SSL', - 'sasl.mechanism' : 'PLAIN', - 'sasl.username' : '$ConnectionString', - 'sasl.password' : '{YOUR.EVENTHUB.CONNECTION.STRING}', - 'group.id': group, - 'client.id': 'python-example-consumer', - 'request.timeout.ms': 60000, - 'default.topic.config': {'auto.offset.reset': 'smallest'} - } - - # Check to see if -T option exists - for opt in optlist: - if opt[0] != '-T': - continue - try: - intval = int(opt[1]) - except ValueError: - sys.stderr.write("Invalid option value for -T: %s\n" % opt[1]) - sys.exit(1) - - if intval <= 0: - sys.stderr.write("-T option value needs to be larger than zero: %s\n" % opt[1]) - sys.exit(1) - - conf['stats_cb'] = stats_cb - conf['statistics.interval.ms'] = int(opt[1]) - - # Create logger for consumer (logs will be emitted when poll() is called) - logger = logging.getLogger('consumer') - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(asctime)-15s %(levelname)-8s %(message)s')) - logger.addHandler(handler) - - # Create Consumer instance - # Hint: try debug='fetch' to generate some log messages - c = Consumer(conf, logger=logger) - - def print_assignment(consumer, partitions): - print('Assignment:', partitions) - - # Subscribe to topics - c.subscribe(topics, on_assign=print_assignment) - - # Read messages from Kafka, print to stdout - try: - while True: - msg = c.poll(timeout=100.0) - if msg is None: - continue - if msg.error(): - # Error or event - if msg.error().code() == KafkaError._PARTITION_EOF: - # End of partition event - sys.stderr.write('%% %s [%d] reached end at offset %d\n' % - (msg.topic(), msg.partition(), msg.offset())) - else: - # Error - raise KafkaException(msg.error()) - else: - # Proper message - print(msg.value()) - - except KeyboardInterrupt: - sys.stderr.write('%% Aborted by user\n') - - finally: - # Close down consumer to commit final offsets. - c.close() diff --git a/samples/kafka/python/producer.py b/samples/kafka/python/producer.py deleted file mode 100644 index 046bc313..00000000 --- a/samples/kafka/python/producer.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# -#Copyright 2016 Confluent Inc. -# -# Modified for use with Azure Event Hubs for Apache Kafka Ecosystems -# 06/18/2018 -# -#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. -# - -# -#Example Kafka Producer. -# -from confluent_kafka import Producer -import sys - -if __name__ == '__main__': - if len(sys.argv) != 2: - sys.stderr.write('Usage: %s \n' % sys.argv[0]) - sys.exit(1) - topic = sys.argv[1] - - #Producer configuration - #See https: //github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md - #See https://github.com/edenhill/librdkafka/wiki/Using-SSL-with-librdkafka#prerequisites for SSL issues - conf = { - 'bootstrap.servers': '{YOUR.EVENTHUB.FQDN}:9093', - 'security.protocol': 'SASL_SSL', - 'sasl.mechanism': 'PLAIN', - 'sasl.username': '$ConnectionString', - 'sasl.password': '{YOUR.EVENTHUB.CONNECTION.STRING}', - 'client.id': 'python-example-producer' - } - - #Create Producer instance - p = Producer (**conf) - - def delivery_callback (err, msg): - if err: - sys.stderr.write ('%% Message failed delivery: %s\n' % err) - else: - sys.stderr.write ('%% Message delivered to %s [%d] @ %o\n' % (msg.topic (), msg.partition (), msg.offset ())) - - - #Write 1-100 to topic - for i in range(0,100): - try: - p.produce(topic, str(i), callback=delivery_callback) - except BufferError as e: - sys.stderr.write('%% Local producer queue is full (%d messages awaiting delivery): try again\n' % len (p)) - p.poll (0) - - #Wait until all messages have been delivered - sys.stderr.write ('%% Waiting for %d deliveries\n' % len (p)) - p.flush () - diff --git a/samples/kafka/python/setup.sh b/samples/kafka/python/setup.sh deleted file mode 100644 index 601d202a..00000000 --- a/samples/kafka/python/setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -echo "Downloading/installing necessary libraries and repos" -sudo apt-get install git openssl libssl-dev build-essential python-pip python-dev librdkafka-dev -git clone https://github.com/confluentinc/confluent-kafka-python -git clone https://github.com/edenhill/librdkafka - -echo "Setting up librdkafka" -cd librdkafka -./configure -make -sudo make install -cd .. - -echo "Setting up Confluent's Python Kafka library" -#The "/" at the end of confluent-kafka-python is important -#If there's no "/" pip will try to download a confluent-kafka-python package and fail to find it -sudo pip install confluent-kafka-python/ -echo "Try running the samples now!" - -#Sometimes 'sudo apt-get purge librdkafka1' helps if this script doesn't work initially diff --git a/samples/kafka/quickstart/README.md b/samples/kafka/quickstart/README.md deleted file mode 100644 index 07d917ef..00000000 --- a/samples/kafka/quickstart/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# We've moved! - -All Event Hubs for Kafka samples and documentation have been moved to https://github.com/Azure/azure-event-hubs-for-kafka. All other samples/docs relating to native (i.e. non-Kafka) Event Hubs SDKs and clients will still live in this repo. - -The Event Hubs for Kafka samples/docs in this repo (i.e. this directory and its subdirectories) are outdated and will be removed soon. - diff --git a/samples/kafka/quickstart/consumer/pom.xml b/samples/kafka/quickstart/consumer/pom.xml deleted file mode 100644 index e141592c..00000000 --- a/samples/kafka/quickstart/consumer/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - 4.0.0 - - com.example.app - event-hubs-kafka-java-consumer - jar - 1.0-SNAPSHOT - - - UTF-8 - UTF-8 - - - - - org.apache.kafka - kafka-clients - 1.0.0 - - - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - - diff --git a/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumer.java b/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumer.java deleted file mode 100644 index 2989d359..00000000 --- a/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumer.java +++ /dev/null @@ -1,18 +0,0 @@ -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -public class TestConsumer { - //Change constant to send messages to the desired topic - private final static String TOPIC = "test"; - - private final static int NUM_THREADS = 1; - - public static void main(String... args) throws Exception { - - final ExecutorService executorService = Executors.newFixedThreadPool(NUM_THREADS); - - for (int i = 0; i < NUM_THREADS; i++){ - executorService.execute(new TestConsumerThread(TOPIC)); - } - } -} diff --git a/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumerThread.java b/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumerThread.java deleted file mode 100644 index d0b2dcef..00000000 --- a/samples/kafka/quickstart/consumer/src/main/java/com/example/app/TestConsumerThread.java +++ /dev/null @@ -1,70 +0,0 @@ -import org.apache.kafka.clients.consumer.*; -import org.apache.kafka.common.serialization.LongDeserializer; -import org.apache.kafka.common.serialization.StringDeserializer; -import java.io.FileReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Collections; -import java.util.Properties; - -public class TestConsumerThread implements Runnable { - - private final String TOPIC; - - //Each consumer needs a unique client ID per thread - private static int id = 0; - - public TestConsumerThread(final String TOPIC){ - this.TOPIC = TOPIC; - } - - public void run (){ - final Consumer consumer = createConsumer(); - System.out.println("Polling"); - - try { - while (true) { - final ConsumerRecords consumerRecords = consumer.poll(1000); - for(ConsumerRecord cr : consumerRecords) { - System.out.printf("Consumer Record:(%d, %s, %d, %d)\n", cr.key(), cr.value(), cr.partition(), cr.offset()); - } - consumer.commitAsync(); - } - } catch (CommitFailedException e) { - System.out.println("CommitFailedException: " + e); - } finally { - consumer.close(); - } - } - - private Consumer createConsumer() { - try { - final Properties properties = new Properties(); - synchronized (TestConsumerThread.class) { - properties.put(ConsumerConfig.CLIENT_ID_CONFIG, "KafkaExampleConsumer#" + id); - id++; - } - properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName()); - properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); - - //Get remaining properties from config file - properties.load(new FileReader("src/main/resources/consumer.config")); - - // Create the consumer using properties. - final Consumer consumer = new KafkaConsumer<>(properties); - - // Subscribe to the topic. - consumer.subscribe(Collections.singletonList(TOPIC)); - return consumer; - - } catch (FileNotFoundException e){ - System.out.println("FileNoteFoundException: " + e); - System.exit(1); - return null; //unreachable - } catch (IOException e){ - System.out.println("IOException: " + e); - System.exit(1); - return null; //unreachable - } - } -} diff --git a/samples/kafka/quickstart/consumer/src/main/resources/consumer.config b/samples/kafka/quickstart/consumer/src/main/resources/consumer.config deleted file mode 100644 index 773f35f8..00000000 --- a/samples/kafka/quickstart/consumer/src/main/resources/consumer.config +++ /dev/null @@ -1,6 +0,0 @@ -bootstrap.servers={EVENT HUB NAMESPACE}.servicebus.windows.net:9093 -group.id=$Default -request.timeout.ms=60000 -security.protocol=SASL_SSL -sasl.mechanism=PLAIN -sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}"; diff --git a/samples/kafka/quickstart/producer/pom.xml b/samples/kafka/quickstart/producer/pom.xml deleted file mode 100644 index 2693e536..00000000 --- a/samples/kafka/quickstart/producer/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - 4.0.0 - - com.example.app - event-hubs-kafka-java-producer - jar - 1.0-SNAPSHOT - - - UTF-8 - UTF-8 - - - - - org.apache.kafka - kafka-clients - 1.0.0 - - - - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - UTF-8 - - - - - - diff --git a/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestDataReporter.java b/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestDataReporter.java deleted file mode 100644 index e12efaee..00000000 --- a/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestDataReporter.java +++ /dev/null @@ -1,37 +0,0 @@ -import org.apache.kafka.clients.producer.Callback; -import org.apache.kafka.clients.producer.Producer; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.clients.producer.RecordMetadata; -import java.sql.Timestamp; - -public class TestDataReporter implements Runnable { - - private static final int NUM_MESSAGES = 100; - private final String TOPIC; - - private Producer producer; - - public TestDataReporter(final Producer producer, String TOPIC) { - this.producer = producer; - this.TOPIC = TOPIC; - } - - @Override - public void run() { - for(int i = 0; i < NUM_MESSAGES; i++) { - long time = System.currentTimeMillis(); - System.out.println("Test Data #" + i + " from thread #" + Thread.currentThread().getId()); - - final ProducerRecord record = new ProducerRecord(TOPIC, time, "Test Data #" + i); - producer.send(record, new Callback() { - public void onCompletion(RecordMetadata metadata, Exception exception) { - if (exception != null) { - System.out.println(exception); - System.exit(1); - } - } - }); - } - System.out.println("Finished sending " + NUM_MESSAGES + " messages from thread #" + Thread.currentThread().getId() + "!"); - } -} diff --git a/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestProducer.java b/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestProducer.java deleted file mode 100644 index 5ebe5ba3..00000000 --- a/samples/kafka/quickstart/producer/src/main/java/com/example/app/TestProducer.java +++ /dev/null @@ -1,46 +0,0 @@ -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.Producer; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.common.serialization.LongSerializer; -import org.apache.kafka.common.serialization.StringSerializer; -import java.util.Properties; -import java.io.FileReader; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - - -public class TestProducer { - //Change constant to send messages to the desired topic, for this example we use 'test' - private final static String TOPIC = "test"; - - private final static int NUM_THREADS = 1; - - - public static void main(String... args) throws Exception { - //Create Kafka Producer - final Producer producer = createProducer(); - - final ExecutorService executorService = Executors.newFixedThreadPool(NUM_THREADS); - - //Run NUM_THREADS TestDataReporters - for (int i = 0; i < NUM_THREADS; i++) - executorService.execute(new TestDataReporter(producer, TOPIC)); - } - - private static Producer createProducer() { - try{ - Properties properties = new Properties(); - properties.load(new FileReader("src/main/resources/producer.config")); - properties.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaExampleProducer"); - properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class.getName()); - properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); - return new KafkaProducer<>(properties); - } catch (Exception e){ - System.out.println("Failed to create producer with exception: " + e); - System.exit(0); - return null; //unreachable - } - } -} - - diff --git a/samples/kafka/quickstart/producer/src/main/resources/producer.config b/samples/kafka/quickstart/producer/src/main/resources/producer.config deleted file mode 100644 index cabaca25..00000000 --- a/samples/kafka/quickstart/producer/src/main/resources/producer.config +++ /dev/null @@ -1,4 +0,0 @@ -bootstrap.servers={EVENT HUB NAMESPACE}.servicebus.windows.net:9093 -security.protocol=SASL_SSL -sasl.mechanism=PLAIN -sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";