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