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