Kafka Streams:单个应用程序中的多种拓扑

时间:2019-04-20 18:02:50

标签: apache-kafka kafka-consumer-api apache-kafka-streams

我想在单个Kafka流应用程序中同时使用Processor API和DSL。另外,如何在单个应用程序中构建和运行多个拓扑(例如使用处理器API的一个拓扑以及使用DSL的其他拓扑。)

1 个答案:

答案 0 :(得分:3)

您可以轻松地混合使用DSL和处理器API。 据我了解,您想使用这两种方法来构建处理图,对于DSL,您可以调用StreamsBuilder::stream,对于Processor API,您可以调用StreamsBuilder::build()以获取Topology和比应用功能添加处理器等。

源代码将是这样的:

StreamsBuilder builder = new StreamsBuilder();
builder.<String, String>stream("input1").to("output1");
Topology topology = builder.build();
topology.addSource("inputNode","input2");
topology.addProcessor("processor1", InputProcessor::new, "inputNode");
topology.addSink("sink1", "output2", "processor1");

KafkaStreams streams = new KafkaStreams(topology, props);
streams.start();

EDIT1:

您可以使用DSL构建两个拓扑,它们并行运行并收听不同的主题。可以使用KStream::transform(...)KStream::transformValues(...)KStream::process(...)提到的@Matthias J. Sax来完成。代码将是这样的:

StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> input1 = builder.<String, String>stream("input1").transform(SampleTransformer1::new);
KStream<String, String> input2 = builder.<String, String>stream("input2").transform(SampleTransformer2::new);