我使用KStream filter
功能根据匹配的谓词写入特定主题:
val builder: KStreamBuilder = new KStreamBuilder()
val stream: KStream[String, String] = builder.stream(config)
val filter1 = stream.filter(predicate1)
val filter2 = stream.filter(predicate2)
filter1.to("out-topic-1")
filter2.to("out-topic-2")
new KafkaStream(builder, properties).start
如何确保如果邮件与这些过滤器中的任何一个都不匹配,它仍会写入默认主题?我已经尝试为"默认"定义输出。流没有运气:
stream.to("default-topic")
感谢您对此事的任何帮助。
答案 0 :(得分:1)
您可以使用KStream#branch
- 它需要多个谓词,最后一个谓词可以无条件地返回true
。如果使用branch
,则记录将恰好包含在一个输出流中。你的逻辑从上面来说有点不同,因为记录可能会在两个输出流(filter1和filter2)中结束。如果您需要保留此branch
工作,但您可以添加以下内容以使第二种情况有效:
val default = stream.filterNot(predicate1).filterNot(predicate2)
default.to("default-topic");