Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 动态路由/复制到Kafka 2中的多个主题_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 动态路由/复制到Kafka 2中的多个主题

Apache kafka 动态路由/复制到Kafka 2中的多个主题,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,Kafka 2通过只支持一个主题值的TopicNameExtractor接口增加了对动态路由的支持 也许我将要描述的是一个糟糕的设计,但在这个阶段,我只是好奇卡夫卡流中有什么可能 假设每封邮件都有一个标签列表,有没有办法根据标签列表将邮件复制到多个主题?,这在目前是不可能的。但是,已经有了对它的功能请求: 目前,如果记录被复制并发送到多个接收器,则只能将记录写入多个输出主题。Matthias如何提到您必须复制消息。可以使用KStream::flatMapValues(ValueMapperWit

Kafka 2通过只支持一个主题值的TopicNameExtractor接口增加了对动态路由的支持

也许我将要描述的是一个糟糕的设计,但在这个阶段,我只是好奇卡夫卡流中有什么可能


假设每封邮件都有一个标签列表,有没有办法根据标签列表将邮件复制到多个主题?

,这在目前是不可能的。但是,已经有了对它的功能请求:


目前,如果记录被复制并发送到多个接收器,则只能将记录写入多个输出主题。

Matthias如何提到您必须复制消息。可以使用
KStream::flatMapValues(ValueMapperWithKey…)轻松创建它

示例代码如下所示。消息将根据
标记:List
进行复制

型号:

公共类人物{
公共字符串名称;
公共列表标签;
公共临时字符串mainTag;
公众人物(字符串名称、列表标记){
this.name=名称;
this.tags=标签;
}
公众人物(字符串名称、列表标记、字符串主标记){
this.name=名称;
this.tags=标签;
this.mainTag=mainTag;
}
}
应用程序:

Properties=newproperties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG,“app1”);
put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,“localhost:9092”);
put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,Serdes.String().getClass());
props.put(StreamsConfig.DEFAULT\u VALUE\u SERDE\u CLASS\u CONFIG,PersonSerdes.CLASS);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,“最早”);
StreamsBuilder builder=新的StreamsBuilder();
KStream输入=builder.stream(“输入”);
input.flatMapValues((readOnlyKey,person)->
person.tags
.stream()
.map(标签->新人物(Person.name,Person.tags,标签))
.collect(收集器.toList())
).to((key,person,recordContext)->person.mainTag);