1.导包
<!-- kafkfa -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
2.配置
spring:
application:
name: kafka-demo
kafka:
bootstrap-servers: 111.111.111.111:9092
producer:
retries: 10
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: group1
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
kafka:
hosts: 139.9.37.235:9092
group: ${spring.application.name}
3.启动类
@SpringBootApplication
public class KafkaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(KafkaDemoApplication.class, args);
}
}
4.配置类
public static void main(String[] args) {
//kafka配置信息
Properties prop = new Properties();
prop.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "111.111.111.111:9092");
prop.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
prop.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
prop.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-demo");
//stream构建器
StreamsBuilder builder = new StreamsBuilder();
hander(builder);
KafkaStreams streams = new KafkaStreams(builder.build(), prop);
//开始处理
streams.start();
}
5.测试
private static void hander(StreamsBuilder builder) {
//监听生产者的消息
KStream<String, String> stream = builder.stream(ProducerHander.topic);
//开始流处理 张三 - 1 张三 - 3 张三 - 2 张三 - 2
stream.groupByKey()
.windowedBy(TimeWindows.of(1000 * 60 * 60 * 24))
.reduce((value1, value2) -> Long.valueOf(value1) + Long.valueOf(value2) + "")
.toStream()
.map((key, value) -> new KeyValue<>(key.key(), value))
.to(ConsumerHander.topic);
}