[ 
https://issues.apache.org/jira/browse/KAFKA-3338?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15220957#comment-15220957
 ] 

Bill Bejeck commented on KAFKA-3338:
------------------------------------

I'm wondering if we need to provide a Serde for the print/writeAsText 
functionality as Serdes are only required when reading from/writing
to a topic or when using a state store.

To give you an idea of where I'm coming from, here's the integration test for 
the implementation of print()
{code}
KStream<String,StockTransaction> transactionKStream =  
kStreamBuilder.stream(stringSerde,transactionSerde,"stocks");

transactionKStream.through(stringSerde, transactionSerde,"stocks-out").print()
                  .map((k,v)-> new KeyValue<>(v.getSymbol(),v)).print()
                  .aggregateByKey(StockTransactionCollector::new,
                                  (k, v, stockTransactionCollector) -> 
stockTransactionCollector.add(v),
                                   
TumblingWindows.of("stock-summaries").with(10000),
                                   stringSerde,collectorSerde).print();
                   .to(windowedSerde,collectorSerde,"transaction-summary");
{code}
This allows me to see all elements from each stream (in order) on stdout.

Thoughts?        

> Add print and writeAsText functions to the Streams DSL
> ------------------------------------------------------
>
>                 Key: KAFKA-3338
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3338
>             Project: Kafka
>          Issue Type: Sub-task
>            Reporter: Guozhang Wang
>            Assignee: Bill Bejeck
>              Labels: newbie++
>             Fix For: 0.10.1.0
>
>
> We want to provide some REPL-like pattern for users for better debuggability. 
> More concretely, we want to allow users to easily inspect their intermediate 
> data streams in the topology while running the application. Theoretically 
> this can be done by using a break point, or by calling System.out.println() 
> inside the operator, or through a finer grained trace-level logging. But more 
> user-friendly API would be to add a print() function to the KStream / KTable 
> object like:
> {code}
> // Prints the elements in this stream to the stdout, i.e. "System.out" of the 
> JVM
> KStream#print(/* optional serde */);  
> KTable#print(/* optional serde */);  
> // Writes the stream as text file(s) to the specified location.
> KStream#writeAsText(String filePath, /* optional serde */);
> KTable#writeAsText(String filePath, /* optional serde */);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to