It really depends on the skill level of the developer. Using low-level
API requires to think about many details (eg. state handling etc.) that
could be done wrong.

As Flink gets a broader community, more people will use it who might not
have the required skill level to deal with low-level API. For more
trained uses, it is of course a powerful tool!

I guess it boils down to the question, what type of developer Flink
targets, if low-level API should be offensive advertised or not. Also
keep in mind, that many people criticized Storm's low-level API as hard
to program etc.


-Matthias

On 08/15/2016 07:46 AM, Gyula Fóra wrote:
> Hi Jamie,
> 
> I agree that it is often much easier to work on the lower level APIs if you
> know what you are doing.
> 
> I think it would be nice to have very clean abstractions on that level so
> we could teach this to the users first but currently I thinm its not easy
> enough to be good starting point.
> 
> The user needs to understand a lot about the system if the dont want to
> hurt other parts of the pipeline. For insance working with the
> streamrecords, propagating watermarks, working with state internals
> 
> This all might be overwhelming at the first glance. But maybe we can slim
> some abstractions down to the point where this becomes kind of the
> extension of the RichFunctions.
> 
> Cheers,
> Gyula
> 
> On Sat, Aug 13, 2016, 17:48 Jamie Grier <ja...@data-artisans.com> wrote:
> 
>> Hey all,
>>
>> I've noticed a few times now when trying to help users implement particular
>> things in the Flink API that it can be complicated to map what they know
>> they are trying to do onto higher-level Flink concepts such as windowing or
>> Connect/CoFlatMap/ValueState, etc.
>>
>> At some point it just becomes easier to think about writing a Flink
>> operator yourself that is integrated into the pipeline with a transform()
>> call.
>>
>> It can just be easier to think at a more basic level.  For example I can
>> write an operator that can consume one or two input streams (should
>> probably be N), update state which is managed for me fault tolerantly, and
>> output elements or setup timers/triggers that give me callbacks from which
>> I can also update state or emit elements.
>>
>> When you think at this level you realize you can program just about
>> anything you want.  You can create whatever fault-tolerant data structures
>> you want, and easily execute robust stateful computation over data streams
>> at scale.  This is the real technology and power of Flink IMO.
>>
>> Also, at this level I don't have to think about the complexities of
>> windowing semantics, learn as much API, etc.  I can easily have some inputs
>> that are broadcast, others that are keyed, manage my own state in whatever
>> data structure makes sense, etc.  If I know exactly what I actually want to
>> do I can just do it with the full power of my chosen language, data
>> structures, etc.  I'm not "restricted" to trying to map everything onto
>> higher-level Flink constructs which is sometimes actually more complicated.
>>
>> Programming at this level is actually fairly easy to do but people seem a
>> bit afraid of this level of the API.  They think of it as low-level or
>> custom hacking..
>>
>> Anyway, I guess my thought is this..  Should we explain Flink to people at
>> this level *first*?  Show that you have nearly unlimited power and
>> flexibility to build what you want *and only then* from there explain the
>> higher level APIs they can use *if* those match their use cases well.
>>
>> Would this better demonstrate to people the power of Flink and maybe
>> *liberate* them a bit from feeling they have to map their problem onto a
>> more complex set of higher level primitives?  I see people trying to
>> shoe-horn what they are really trying to do, which is simple to explain in
>> english, onto windows, triggers, CoFlatMaps, etc, and this get's
>> complicated sometimes.  It's like an impedance mismatch.  You could just
>> solve the problem very easily programmed in straight Java/Scala.
>>
>> Anyway, it's very easy to drop down a level in the API and program whatever
>> you want but users don't seem to *perceive* it that way.
>>
>> Just some thoughts...  Any feedback?  Have any of you had similar
>> experiences when working with newer Flink users or as a newer Flink user
>> yourself?  Can/should we do anything to make the *lower* level API more
>> accessible/visible to users?
>>
>> -Jamie
>>
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to