1. 类
@Evolving
public class KafkaStreams
extends java.lang.Object
2. 简介
一个Kafka客户端,支持从1个或多个输入topics发送到0个、1个或多个输出topics,并提供持续不间断的计算服务。
其处理逻辑可用使用Topogy类提供的DAG拓扑处理器来定义,或者过StreamsBuilder提供的高层次DSL来定义传输。
一个KafkaStreams实例可以包含一个或多个线程,线程数可以通过对 processing work配置来指定。
一个KafkaStreams实例可以与具有相同 application ID的任何其它实例(可以在同一个进程中,可以是同一台机器的不同进程,也可以是在远端机器中) 做为一个整体的流式处理程序。这些实例将根据输入topic的分区来划分任务,这样就可以保证所有的分区都会被消费。实例增加或失败时,会触发再平衡(rebalance),保证负载平衡,以及保证所有的分区都可以被处理。
KafkaStreams内部包含一个普通的 KafkaProducer
和 KafkaConsumer来进行输入和输出。
3. 使用示例
Map<String, Object> props = new HashMap<>();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-stream-processing-application");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
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 builder = new StreamsBuilder();
builder.<String, String>stream("my-input-topic").mapValues(value -> value.length().toString()).to("my-output-topic");
KafkaStreams streams = new KafkaStreams(builder.build(), config);
streams.start();