簡體   English   中英

如何在 Kafka 流中打印 TimeWindowedKStream 和 KTable?

[英]How to print TimeWindowedKStream and KTable in Kafka streams?

我們有一個 Kafka 進程,它將一個主題作為輸入,並將定時 window 寫入 output 主題。正在使用以下代碼。 我想打印 TimeWindowedKStream(groupedStream) 和 KTable(aggregatedTable) 並查看 output 以進行一些調試。

    String intopic = input_topic;
    Long window = 60;
    String outtopic = output_topic;
    
    final Serde<String> stringSerde = Serdes.String();

    Properties property = new Properties();
    property.put("bootstrap.servers", "127.0.0.1:9092");
    property.put("group.id", "test-consumer-group");
    property.put("application.id", "sliding-window-min-bar");
    property.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, stringSerde.getClass().getName());
    property.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, stringSerde.getClass().getName());

    Duration windowSizeMs = Duration.ofMinutes(window);

    StreamsBuilder builder = new StreamsBuilder();
    
    System.out.println(intopic);

    KStream<String, String> equitybar = builder.stream(intopic, Consumed.with(stringSerde, stringSerde));
    
    System.out.println(equitybar);
    
    equitybar.print(Printed.toSysOut());

    // convert string of csv to a double on the mean value
    KStream<String, String> transformedbar = equitybar
            .map((key, value) -> KeyValue.pair(key, value.substring(1,value.length()-2).split(",")[2]));

    System.out.println(transformedbar);

    transformedbar.print(Printed.toSysOut());
    
    // group by equity and sliding window
    
    System.out.println(windowSizeMs);
    System.out.println(TimeWindows.of(windowSizeMs).advanceBy(advanceMs));
    
    TimeWindowedKStream<String, String> groupedStream = transformedbar.groupByKey().windowedBy(TimeWindows.of(windowSizeMs).advanceBy(advanceMs));

    System.out.println(groupedStream);
    KTable<Windowed<String>, String> aggregatedTable = groupedStream.aggregate(
            () -> "|",
            (aggKey, newValue, aggValue) -> aggValue + newValue.trim() + "|")      ; 
    

我嘗試使用用於 Kafka 流的打印命令來打印它 - groupedStream.print(Printed.toSysOut()); - 但它似乎沒有工作。

謝謝。

KGroupedStreamTimeWindowedKStream是“只是”幫助類,以允許 DSL 將流暢的 API 呈現給鏈式運算符,而不會在單個 class 上出現過多的重載。

在 DSL 中,只有兩個主要的抽象, KStreamKTable ,它們是實際的一流數據容器。 因此,您想要做的事情是不可能的。

暫無
暫無

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

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