Kafka窗口函数
public class WindowStream {
public static void main(String[] args) {
Properties prop=new Properties();
prop.put(StreamsConfig.APPLICATION_ID_CONFIG,"windowdemo");
prop.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.146.222:9092");
prop.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG,3000);
prop.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"false");
prop.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
prop.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
prop.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
StreamsBuilder builder = new StreamsBuilder();
SessionWindowedKStream<String, String> windowdemo = builder.stream("windowdemo")
.flatMapValues(value -> {
String[] split = value.toString().split("\\s+");
return Arrays.asList(split);
}).map((key, value) -> {
return new KeyValue<String, String>(value, "1");
}).groupByKey()
.windowedBy(SessionWindows.with(Duration.ofSeconds(15).toMillis()));
KStream<Windowed<String>, Long> windowedLongKStream = windowdemo.count().toStream();
windowedLongKStream.foreach((key,value)->{
System.out.println("key:"+key+",value:"+value);
});
Topology topo = builder.build();
final KafkaStreams streams = new KafkaStreams(topo, prop);
final CountDownLatch latch = new CountDownLatch(1);
Runtime.getRuntime().addShutdownHook(new Thread("stream"){
@Override
public void run() {
streams.close();
latch.countDown();
}
});
try{
streams.start();
latch.await();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}