项目源码:https://github.com/NickyWooden/kafka-streams-demo.git
Kafka streams是kafka提供的用于实时流计算的类库,支持各种窗口操作、支持事件时间、支持水印、多个流join操作、状态及容错,可与kafka或其他消息系统结合使用,用于将订阅kafka topic数据实时处理后结果推回kafka或其他消息系统
相比于其他实时流处理框架,比如Spark Streaming/Structured Streaming 、Flink、Storm,为什么要用Kafka Streams呢?
因为它是个类库,使用轻量便携非侵入,可以灵活地嵌入任何java或Scala业务代码中,与kafka 无缝结合使用
而其他的流处理框架相对太笨重,要搭建一系列集群,还要打包提交任务,现实在数据量不大的情况下完全可以使用Kafka Streams来做,比如将两台硬件设备的实时日志消息做个Join连接加滑动窗口操作比如卡口摄像头拍到的车牌和伪基站捕获的手机号做join用于抓捕罪犯
1.新建maven项目,引入依赖,版本要和server一致
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
2.编写第一个kafka-streams应用:word-cout
server端创建两个topic,input-topic,output-topic,分别为kafka streams输入topic和计算后输出topic
./kafka-topics.sh --create --bootstrap-server 192.168.1.107:9092 --replication-factor 1 --partitions 1 --topic input-topic
./kafka-topics.sh --create --bootstrap-server 192.168.1.107:9092 --replication-factor 1 --partitions 1 --topic output-topic
#分别为input-topic开生产者shell客户端,output-topic开消费者客户端
./kafka-console-producer.sh --broker-list 192.168.1.107:9092 --topic input-topic
./kafka-console-consumer.sh --bootstrap-server 192.168.1.107:9092 --topic output-topic --from-beginning
新建java 文件编写程序代码
package com.ly.kafka.main;
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.common.utils.Bytes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache