Kafka Streams:一条记录​​到多条记录

时间:2017-05-30 13:48:07

标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams

鉴于:我在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列表。如何将此列表分成两个生产者流?任何帮助将不胜感激。

2 个答案:

答案 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>(值)不变,因为这是您预期的最终结果