Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 将消息流式传输到多个主题_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

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

Apache kafka 将消息流式传输到多个主题,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有一个主主题和多个谓词,每个谓词都有一个与之关联的输出主题。我想将每条记录发送到谓词解析为true的所有主题。我使用Luwak来测试记录满足哪些谓词(要使用这个库,您需要使用谓词列表来评估文档,它会告诉您哪些谓词匹配,也就是说,我只调用它一次以获得满足的谓词列表) 我试图使用Kafka Streams来实现这一点,但在KStream上似乎没有合适的方法(KStream#branch只将记录路由到单个主题) 一种可能的方法如下: Stream from master Map the values

我有一个主主题和多个谓词,每个谓词都有一个与之关联的输出主题。我想将每条记录发送到谓词解析为true的所有主题。我使用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
不过,这样一个中间话题似乎“笨拙”。还有更好的建议吗

我正在使用:

  • 卡夫卡v0.10.1.1
  • 卢瓦克v1.4.0

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

KStream流=。。。
stream.filter(新的MyPredicate1()).to(“output-topic-1”);
stream.filter(新的MyPredicate2()).to(“output-topic-2”);
stream.filter(新的MyPredicate3()).to(“output-topic-3”);
// ... 你需要多少就有多少

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

也可以使用分支。@CyberKnight不适用于上面描述的用例:
branch()
只允许您将每条记录最多放入一个输出流(即,您可以将记录放入不同的主题),而用例描述是将每条记录写入多个输出流(多个!=不同)。我明白了。那么提供的答案就足够了。你是对的!