簡體   English   中英

Kafka Streams:在發布到不同主題之前如何轉換消息

[英]Kafka Streams: How to transform message before publishing to different topics

使用Kafka Streams閱讀有關主題A的消息。 根據一些驗證,該消息將發布到主題B或主題C。使用Kafka Streams的分支方法很容易實現

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之前,必須對其進行編輯/附加。如何實現?

要轉換消息,可以使用以下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);

正如我從branch方法中的process方法名稱中看到的那樣,可能會嘗試處理值,但只需要提供Predicate (返回truefalse )就無需任何處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM