As far as I know you don't have to define a sink in order to define a valid
Flink program (using Flink >= 1.9). Your topology can simply end in a map
function and it should be executable once you call env.execute().

Cheers,
Till

On Tue, Jan 28, 2020 at 10:06 AM Arvid Heise <ar...@ververica.com> wrote:

> As Konstantin said, you need to use a sink, but you could use
> `org.apache.flink.streaming.api.functions.sink.DiscardingSink`.
>
> There is nothing inherently wrong with outputting things through a UDF.
> You need to solve the same challenges as in a SinkFunction: you need to
> implement your own state management. Also make sure that you can handle
> duplicates occurring during recovery after a restart.
>
> On Tue, Jan 28, 2020 at 6:43 AM Konstantin Knauf <konstan...@ververica.com>
> wrote:
>
>> Hi Andrew,
>>
>> as far as I know there is nothing particularly special about the sink in
>> terms of how it handles state or time. You can not leave the pipeline
>> "unfinished", only sinks trigger the execution of the whole pipeline.
>>
>> Cheers,
>>
>> Konstantin
>>
>>
>>
>> On Fri, Jan 24, 2020 at 5:59 PM Andrew Roberts <arobe...@fuze.com> wrote:
>>
>>> Hello,
>>>
>>> I’m trying to push some behavior that we’ve currently got in a large,
>>> stateful SinkFunction implementation into Flink’s windowing system. The
>>> task at hand is similar to what StreamingFileSink provides, but more
>>> flexible. I don’t want to re-implement that sink, because it uses the
>>> StreamingRuntimeContext.getProcessingTimeService() via a cast - that class
>>> is marked as internal, and I’d like to avoid the exposure to an interface
>>> that could change. Extending it similarly introduces complexity I would
>>> rather not add to our codebase.
>>>
>>> WindowedStream.process() provides more or less the pieces I need, but
>>> the stream continues on after a ProcessFunction - there’s no way to
>>> process() directly into a sink. I could use a ProcessFunction[In, Unit,
>>> Key, Window], and follow that immediately with a no-op sink that discards
>>> the Unit values, or I could just leave the stream “unfinished," with no
>>> sink.
>>>
>>> Is there a downside to either of these approaches? Is there anything
>>> special about doing sink-like work in a ProcessFunction or FlatMapFunction
>>> instead of a SinkFunction?
>>>
>>> Thanks,
>>>
>>> Andrew
>>>
>>>
>>>
>>> --
>>> *Confidentiality Notice: The information contained in this e-mail and any
>>>
>>> attachments may be confidential. If you are not an intended recipient,
>>> you
>>>
>>> are hereby notified that any dissemination, distribution or copying of
>>> this
>>>
>>> e-mail is strictly prohibited. If you have received this e-mail in error,
>>>
>>> please notify the sender and permanently delete the e-mail and any
>>>
>>> attachments immediately. You should not retain, copy or use this e-mail
>>> or
>>>
>>> any attachment for any purpose, nor disclose all or any part of the
>>>
>>> contents to any other person. Thank you.*
>>>
>>
>>
>> --
>>
>> Konstantin Knauf | Solutions Architect
>>
>> +49 160 91394525
>>
>>
>> Follow us @VervericaData Ververica <https://www.ververica.com/>
>>
>>
>> --
>>
>> Join Flink Forward <https://flink-forward.org/> - The Apache Flink
>> Conference
>>
>> Stream Processing | Event Driven | Real Time
>>
>> --
>>
>> Ververica GmbH | Invalidenstrasse 115, 10115 Berlin, Germany
>>
>> --
>> Ververica GmbH
>> Registered at Amtsgericht Charlottenburg: HRB 158244 B
>> Managing Directors: Timothy Alexander Steinert, Yip Park Tung Jason, Ji
>> (Tony) Cheng
>>
>

Reply via email to