将消息流式传输到多个主题
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"。有更好的建议吗?
我正在使用:
- Kafka v0.10.1.1
- Luwak v1.4.0
您可以简单地将多个过滤器并行应用到同一个 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
每条记录将被发送到每个谓词一次 -- 它在概念上是对所有过滤器的广播,但不会物理复制记录,因此没有内存开销。
我有一个主主题和多个谓词,每个谓词都有一个与之关联的输出主题。我想将每条记录发送到谓词解析为真的所有主题。我正在使用 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"。有更好的建议吗?
我正在使用:
- Kafka v0.10.1.1
- Luwak v1.4.0
您可以简单地将多个过滤器并行应用到同一个 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
每条记录将被发送到每个谓词一次 -- 它在概念上是对所有过滤器的广播,但不会物理复制记录,因此没有内存开销。