将消息流式传输到多个主题

Streaming messages to multiple topics

我有一个主主题和多个谓词,每个谓词都有一个与之关联的输出主题。我想将每条记录发送到谓词解析为真的所有主题。我正在使用 Luwak 来测试满足哪个谓词的记录(要使用这个库,你需要评估一个包含谓词列表的文档,它会告诉你哪些是匹配的——也就是说,我只调用它一次来获取满足的谓词列表)。

我正在尝试为此使用 Kafka Streams,但 KStream 上似乎没有合适的方法(KStream#branch 仅将记录路由到单个主题)。

一种可能的方法如下:

Stream from master
Map the values into a format with the original content and the list of matching predicates
Stream to an intermediate with-matches topic

For each predicate/output topic
    Stream from intermediate with-matches topic
    Filter "does list of matches predicates contain predicate ID"
    Map the values to just the original content
    Stream to corresponding output topic

虽然这样的中间话题似乎 "clunky"。有更好的建议吗?

我正在使用:

您可以简单地将多个过滤器并行应用到同一个 KStream 实例:

KStream stream = ...

stream.filter(new MyPredicate1()).to("output-topic-1");
stream.filter(new MyPredicate2()).to("output-topic-2");
stream.filter(new MyPredicate3()).to("output-topic-3");
// ... as as many as you need

每条记录将被发送到每个谓词一次 -- 它在概念上是对所有过滤器的广播,但不会物理复制记录,因此没有内存开销。