前言
- kafka版本:2.11-2.1.1
- 主要练习的功能是:在某个生产者向first主题中生产消息时,同时通过KafkaStreams将生产消息作特定处理后输出到主题second中
Maven依赖
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>2.1.1</version>
</dependency>
代码
KafkaSteamsDemo.java:
public class KafkaSteamsDemo {
public static void main(String[] args) {
Properties props = new Properties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "KafkaStreamsDemo");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop101:9092,hadoop102:9092,hadoop103:9092");
String streamSourceTopic = "first";
String streamSinkTopic = "second";
StreamsBuilder streamsBuilder = new StreamsBuilder();
Topology topology = streamsBuilder.build()
.addSource("StreamSource", streamSourceTopic)
.addProcessor("StreamProcessor", new ProcessorSupplier<byte[], byte[]>() {
@Override
public Processor<byte[], byte[]> get() {
return new LogProcessor();
}
}, "StreamSource")
.addSink("StreamSink", streamSinkTopic, "StreamProcessor");
KafkaStreams kafkaStreams = new KafkaStreams(topology, props);
kafkaStreams.start();
}
}
LogProcessor.java:
public class LogProcessor implements Processor<byte[], byte[]> {
private ProcessorContext context;
@Override
public void init(ProcessorContext context) {
this.context = context;
}
@Override
public void process(byte[] key, byte[] value) {
String inputValue = new String(value);
inputValue = inputValue.replaceAll(">>>", "");
context.forward(key, inputValue.getBytes());
}
@Override
public void close() {
}
}
End~