Hopping Time Window (滑动窗口,有重合部分数据) 该窗口定义如下图所示。它有两个属性,一个是Window size,一个是Advance interval。Window size指定了窗口的大小,也即每次计算的数据集的大小。而Advance interval定义输出的时间间隔。一个典型的应用场景是,每隔5秒钟输出一次过去1个小时内网站的PV或者UV。
package kafka_stream;
import org. apache. kafka. clients. consumer. ConsumerConfig;
import org. apache. kafka. common. serialization. Serdes;
import org. apache. kafka. streams. *;
import org. apache. kafka. streams. kstream. KStream;
import org. apache. kafka. streams. kstream. TimeWindows;
import java. time. Duration;
import java. util. Arrays;
import java. util. Properties;
import java. util. concurrent. CountDownLatch;
public class windowStream {
public static void main( String [ ] args) {
Properties prop = new Properties( ) ;
prop. put( StreamsConfig. APPLICATION_ID_CONFIG, "windowDemo1" ) ;
prop. put( StreamsConfig. BOOTSTRAP_SERVERS_CONFIG, "192.168.184.40:9092" ) ;
prop. put( StreamsConfig. COMMIT_INTERVAL_MS_CONFIG, 3000 ) ;
prop. put( ConsumerConfig. AUTO_OFFSET_RESET_CONFIG, "earliest" ) ;
prop. put( ConsumerConfig. ENABLE_AUTO_COMMIT_CONFIG, "false" ) ;
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( ) ;
KStream< Object, Object> source = builder. stream( "hoppingwindowDemo" ) ;
source. flatMapValues( value- > Arrays. asList( value. toString( ) ) )
. map( ( x, y) - > {
return new KeyValue< String, String> ( y, "1" )