فهرست منبع

switch to rh builds, update deps & java, add mvn exec profiles, make properties optional, comment stuff

Grega Bremec 7 ماه پیش
والد
کامیت
fc6fc3cc90

+ 88 - 18
sample-stream/pom.xml

@@ -5,42 +5,112 @@
 
   <groupId>com.redhat.training.kafka</groupId>
   <artifactId>sample-stream</artifactId>
-  <version>1.0</version>
-  <name>producer</name>
+  <version>1.0.1</version>
+  <name>streams</name>
   <packaging>jar</packaging>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.compiler.source>11</maven.compiler.source>
-    <maven.compiler.target>11</maven.compiler.target>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.target>17</maven.compiler.target>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>org.apache.kafka</groupId>
-      <artifactId>kafka-clients</artifactId>
-      <version>2.8.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
       <artifactId>kafka-streams</artifactId>
-      <version>2.8.0</version>
+      <version>3.7.0.redhat-00007</version>
     </dependency>
     <dependency>
         <groupId>io.smallrye.config</groupId>
         <artifactId>smallrye-config</artifactId>
-        <version>2.13.3</version>
+        <version>3.5.4.redhat-00001</version>
     </dependency>
     <!-- smallrye-config declares everything but this as transitive -->
-    <dependency>
+    <!-- <dependency>
         <groupId>javax.annotation</groupId>
         <artifactId>javax.annotation-api</artifactId>
         <version>1.3.2</version>
-    </dependency>
+    </dependency> -->
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <version>1.7.30</version>
-    </dependency>
-  </dependencies>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-simple</artifactId>
+        <version>2.0.7.redhat-00003</version>
+      </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.4.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>java</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.redhat.training.kafka.SimpleStream</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <profiles>
+        <profile>
+            <id>producer</id>
+            <activation>
+                <property>
+                    <name>producer</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>3.4.1</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.redhat.training.kafka.RandomPaymentProducer</mainClass>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>consumer</id>
+            <activation>
+                <property>
+                    <name>consumer</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>3.4.1</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.redhat.training.kafka.LargePaymentConsumer</mainClass>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>

+ 16 - 11
sample-stream/src/main/java/com/redhat/training/kafka/SimpleStream.java

@@ -30,9 +30,11 @@ public class SimpleStream {
 
         props.put(StreamsConfig.APPLICATION_ID_CONFIG, "simpleStreamProcessor");
         props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, cf.getValue("kafka.server", String.class));
-        props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL");
-        props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, cf.getValue("ssl.truststore", String.class));
-        props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, cf.getValue("ssl.password", String.class));
+        props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, cf.getOptionalValue("kafka.protocol", String.class).orElse("PLAINTEXT"));
+        if (props.get(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG).equals("SSL")) {
+            props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, cf.getValue("ssl.truststore", String.class));
+            props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, cf.getValue("ssl.password", String.class));
+        }
 
         return props;
     }
@@ -48,19 +50,17 @@ public class SimpleStream {
 
         StreamsBuilder b = new StreamsBuilder();
 
-        // just logs everything received
-        // b.stream(srcTopic, Consumed.with(ks, vs))
-        //         .foreach((key, val) -> System.out.println("Received key: " + key + ", value: " + val));
-
-        // this is the same for the following two examples
+        // returns a kstream that you can append processors to
         KStream<String, Integer> src = b.stream(srcTopic, Consumed.with(ks, vs));
 
         // logs everything and sends records above $foo for further processing using a filter
-        // src.foreach((key, val) -> System.out.println("Received key: " + key + ", value: " + val));
+        src.foreach((key, val) -> System.out.println("Received key: " + key + ", value: " + val));
+
+        // either filter for interesting things and drop everything else...
         // src.filter((key, value) -> value > 2500)
         //         .to(dstTopic, Produced.with(ks, vs));
 
-        // uses the split processor (2.8.0+) to create substreams per-criteria and attach processors to them
+        // or use the split processor (2.8.0+) to create substreams per-criteria and attach processors to them
         Map<String, KStream<String, Integer>> splits = src.split(Named.as("stream-"))
                         .branch((k, v) -> v <= 2500, Branched.as("log"))
                         .defaultBranch(Branched.as("proc"));
@@ -75,11 +75,17 @@ public class SimpleStream {
         splits.get("stream-proc").foreach((key, val) -> System.out.println("Received HIGH PAYMENT key: " + key + ", value: " + val));
         splits.get("stream-proc").to(dstTopic, Produced.with(ks, vs));
 
+        // this builds the topology for streams
         Topology t = b.build();
+
+        // print the topology on stdout
         TopologyDescription td = t.describe();
         System.out.println("**** TOPOLOGY ****\n" + td.toString());
 
+        // manually create a streams object
         KafkaStreams str = new KafkaStreams(t, cfg);
+
+        // shutdown handler
         final CountDownLatch cd = new CountDownLatch(1);
         Runtime.getRuntime().addShutdownHook(new Thread("streams-shutdown") {
             @Override
@@ -88,7 +94,6 @@ public class SimpleStream {
                 cd.countDown();
             }
         });
-
         try {
             str.start();
             cd.await();

+ 6 - 3
sample-stream/src/main/resources/META-INF/microprofile-config.properties

@@ -1,3 +1,6 @@
-kafka.server = my-kafka-cluster:port
-ssl.truststore = path/to/truststore.jks
-ssl.password = truststorepass
+kafka.server = localhost:9091
+# kafka.protocol = PLAINTEXT
+# ssl.truststore = path/to/truststore.jks
+# ssl.password = truststorepass
+# kafka.topic.payments =
+# kafka.topic.largepayments =