Kafka Streams:在发布到不同主题之前如何转换消息

时间:2018-07-19 18:10:48

标签: apache-kafka apache-kafka-streams

使用Kafka Streams阅读有关主题A的消息。根据一些验证,该消息将发布到主题B或主题C。使用Kafka Streams的branch方法很容易做到这一点

KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, String> kStream = kStreamBuilder.stream(Serdes.String(), Serdes.String(), topicA.split(","));

KStream<String, String>[] splitStreams = kStream.branch(
    (key, value) -> process(value), //Process method is expensive
    (key, value) -> true
);

splitStreams[0].to(Serdes.String(), Serdes.String(), topicB);
splitStreams[1].to(Serdes.String(), Serdes.String(), topicC);

问题:根据消息是否通过验证,在将其发布到主题B或主题C之前,将对其进行编辑/附加。 我实现了吗?

1 个答案:

答案 0 :(得分:1)

要转换消息,可以使用以下KStream方法:

  • map(用于根据键和值更新消息)
  • mapValues(用于根据值更新消息)
  • selectKey(用于根据键和值更新键)

示例:

splitStreams[0].mapValues(value -> transformValueForTopicB(value))
        .to(Serdes.String(), Serdes.String(), topicB);
splitStreams[1].map((key, value) -> transformValueForTopicC(key, value))
        .to(Serdes.String(), Serdes.String(), topicC);

正如我从process方法内的branch方法名称中看到的那样,可能您试图处理值,但是您只需要提供Predicate(返回truefalse),无需进行任何处理。