鉴于:我在Kafka中有两个主题让我们说主题A和主题B.Kafka Stream从主题A读取记录,处理它并产生与消费记录对应的多个记录(比如说记录A和记录B)。现在,问题是如何使用Kafka Streams实现这一目标。
KStream<String, List<Message>> producerStreams[] = recordStream.mapValues(new ValueMapper<Message, List<Message>>() {
@Override
public List<Message> apply(final Message message) {
return consumerRecordHandler.process(message);
}
}).*someFunction*()
这里,读取的记录是Message;处理完毕后,返回Message列表。如何将此列表分成两个生产者流?任何帮助将不胜感激。
答案 0 :(得分:11)
我不确定我是否正确理解了这个问题,而且我也不理解@Abhishek的答案:(
如果您有输入流,并且希望每个输入记录获得零个,一个或多个输出记录,则应使用flatMap()
或flatMapValues()
(具体取决于您是否要修改关键与否)。
您还在询问“如何将此列表划分为两个生产者流?”如果您要将一个流拆分为多个,则可以使用branch()
。
有关详细信息,请参阅文档:http://docs.confluent.io/current/streams/developer-guide.html#stateless-transformations
答案 1 :(得分:3)
你的钥匙(类型)是什么?我猜它不是String
。执行mapValues
后,您将拥有此权限 - KStream<K,List<Message>>
。如果K
不是String
,则someFunction()
可以是map
,它会将K
转换为String
(如果是,则您已经拥有结果)并保持List<Message>
(值)不变,因为这是您预期的最终结果