需求
将topic1中的数据写入到topic2中,中间需要做到将小写转换为大写。
第一步:使用终端创建topic1和topic2;
第二步:调用生产者API或在终端往topic1中写入数据;
第四步:打开topic2的消费着终端,验证是否转换成功;
第三步:编写StreamAPI,并运行。
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import java.util.HashMap;
import java.util.Map;
public class StreamAPI {
/**
* 通过StreamAPI实现将数据从test里面读取出来,写入到test2里面去
* @param args
*/
public static void main(String[] args) {
Map<String, Object> props = new HashMap<>();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-stream-processing-application-bigger"); //应用id
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "ip:9092");
//获取k、v的序列化和反序列化的方法
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
StreamsConfig config = new StreamsConfig(props);
//获取核心类StreamsBuilder
StreamsBuilder streamsBuilder = new StreamsBuilder();
//通过streamsBuilder调用stream方法表示从哪个topic当中获取数据
//调用mapvalues方法,表示将每一行value都取出来
//value表示取出来的一行行的数据
//将转成大写的数据,写入到test2这个topic里面去
streamsBuilder.stream("test").mapValues(value -> value.toString().toUpperCase()).to("test2");
//通过StreamsBuilder创建kafkaStreams,通过它来实现流式的编程启动
KafkaStreams streams = new KafkaStreams(streamsBuilder.build(), config);
//调用start
streams.start();
}
}