I also agree @Zili Chen !

On Fri, Oct 4, 2019 at 10:17 AM Aljoscha Krettek <aljos...@apache.org> wrote:
>
> This makes sense to me, yes!
>
> > On 2. Oct 2019, at 20:35, Zili Chen <wander4...@gmail.com> wrote:
> >
> > Hi all,
> >
> > Narrow the scope to FLIP-74 we aimed at introduce a useful and extensible
> > user-facing public interface JobClient. Let me reemphasize two major works
> > under this thread.
> >
> > 1. standard interface
> >
> > As in FLIP-74 we introduce an interface JobClient with its methods, we'd
> > like to
> > make it a standard (non-final since we can always extends on demand)
> > interface.
> >
> > On this branch I'd like to, with respect to Konstantin's suggestion, 1)
> > exclude deprecated
> > cancelWithSavepoint from the proposal 2) rename stopWithSavepoint to stop
> > to keep
> > consistency with our CLI command. If there is no more concern on these
> > topics I will
> > update proposal tomorrow.
> >
> > 2. client interfaces are asynchronous
> >
> > If the asynchronous JobClient interfaces approved, a necessary proposed
> > changed is
> > corresponding update ClusterClient interfaces. Still ClusterClient is an
> > internal concept
> > after this FLIP but it might have some impact so I think it's better to
> > reach a community
> > consensus as prerequisite. Note that with all client methods are
> > asynchronous, no matter
> > whether or not we remove client side detach option it is no power.
> >
> > Let me know your ideas on these topic and keep moving forward :-)
> >
> > Best,
> > tison.
> >
> >
> > Zili Chen <wander4...@gmail.com> 于2019年10月2日周三 下午4:10写道:
> >
> >> Hi Konstantin,
> >>
> >> * should we add "cancelWithSavepeoint" to a new public API, when we have
> >> deprecated the corresponding REST API/CLI methods? In my understanding
> >> there is no reason to use it anymore.
> >>
> >> Good point. We can exclude "cancelWithSavepoint" from public API at least
> >> for now,
> >> since it is deprecated already. Let's see if there is other concerns.
> >>
> >> * should we call "stopWithSavepoint" simply "stop" as "stop" always
> >> performs a savepoint?
> >>
> >> Well for naming issue I'm fine with that if it is a consensus of our
> >> community. I can see
> >> there is a "stop" CLI command which means "stop with savepoint".
> >>
> >> Best,
> >> tison.
> >>
> >>
> >> Konstantin Knauf <konstan...@ververica.com> 于2019年9月30日周一 下午12:16写道:
> >>
> >>> Hi Thomas,
> >>>
> >>> maybe there is a misunderstanding. There is no plan to deprecate anything
> >>> in the REST API in the process of introducing the JobClient API, and it
> >>> shouldn't.
> >>>
> >>> Since "cancel with savepoint" was already deprecated in the REST API and
> >>> CLI, I am just raising the question whether to add it to the JobClient API
> >>> in the first place.
> >>>
> >>> Best,
> >>>
> >>> Konstantin
> >>>
> >>>
> >>>
> >>> On Mon, Sep 30, 2019 at 1:16 AM Thomas Weise <t...@apache.org> wrote:
> >>>
> >>>> I did not realize there was a plan to deprecate anything in the REST
> >>> API?
> >>>>
> >>>> The REST API is super important for tooling written in non JVM
> >>> languages,
> >>>> that does not include a Flink client (like FlinkK8sOperator). The REST
> >>> API
> >>>> should continue to support all job management operations, including job
> >>>> submission.
> >>>>
> >>>> Thomas
> >>>>
> >>>>
> >>>> On Sun, Sep 29, 2019 at 1:37 PM Konstantin Knauf <
> >>> konstan...@ververica.com
> >>>>>
> >>>> wrote:
> >>>>
> >>>>> Hi Zili,
> >>>>>
> >>>>> thanks for working on this topic. Just read through the FLIP and I
> >>> have
> >>>> two
> >>>>> questions:
> >>>>>
> >>>>> * should we add "cancelWithSavepeoint" to a new public API, when we
> >>> have
> >>>>> deprecated the corresponding REST API/CLI methods? In my understanding
> >>>>> there is no reason to use it anymore.
> >>>>> * should we call "stopWithSavepoint" simply "stop" as "stop" always
> >>>>> performs a savepoint?
> >>>>>
> >>>>> Best,
> >>>>>
> >>>>> Konstantin
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Fri, Sep 27, 2019 at 10:48 AM Aljoscha Krettek <
> >>> aljos...@apache.org>
> >>>>> wrote:
> >>>>>
> >>>>>> Hi Flavio,
> >>>>>>
> >>>>>> I agree that this would be good to have. But I also think that this
> >>> is
> >>>>>> outside the scope of FLIP-74, I think it is an orthogonal feature.
> >>>>>>
> >>>>>> Best,
> >>>>>> Aljoscha
> >>>>>>
> >>>>>>> On 27. Sep 2019, at 10:31, Flavio Pompermaier <
> >>> pomperma...@okkam.it>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Hi all,
> >>>>>>> just a remark about the Flink REST APIs (and its client as well):
> >>>>> almost
> >>>>>>> all the times we need a way to dynamically know which jobs are
> >>>>> contained
> >>>>>> in
> >>>>>>> a jar file, and this could be exposed by the REST endpoint under
> >>>>>>> /jars/:jarid/entry-points (a simple way to implement this would
> >>> be to
> >>>>>> check
> >>>>>>> the value of Main-class or Main-classes inside the Manifest of the
> >>>> jar
> >>>>> if
> >>>>>>> they exists [1]).
> >>>>>>>
> >>>>>>> I understand that this is something that is not strictly required
> >>> to
> >>>>>>> execute Flink jobs but IMHO it would ease A LOT the work of UI
> >>>>> developers
> >>>>>>> that could have a way to show the users all available jobs inside
> >>> a
> >>>>> jar +
> >>>>>>> their configurable parameters.
> >>>>>>> For example, right now in the WebUI, you can upload a jar and then
> >>>> you
> >>>>>> have
> >>>>>>> to set (without any autocomplete or UI support) the main class and
> >>>>> their
> >>>>>>> params (for example using a string like --param1 xx --param2 yy).
> >>>>>>> Adding this functionality to the REST API and the respective
> >>> client
> >>>>> would
> >>>>>>> enable the WebUI (and all UIs interacting with a Flink cluster) to
> >>>>>> prefill
> >>>>>>> a dropdown list containing the list of entry-point classes (i.e.
> >>>> Flink
> >>>>>>> jobs) and, once selected, their required (typed) parameters.
> >>>>>>>
> >>>>>>> Best,
> >>>>>>> Flavio
> >>>>>>>
> >>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-10864
> >>>>>>>
> >>>>>>> On Fri, Sep 27, 2019 at 9:16 AM Zili Chen <wander4...@gmail.com>
> >>>>> wrote:
> >>>>>>>
> >>>>>>>> modify
> >>>>>>>>
> >>>>>>>> /we just shutdown the cluster on the exit of client that running
> >>>>> inside
> >>>>>>>> cluster/
> >>>>>>>>
> >>>>>>>> to
> >>>>>>>>
> >>>>>>>> we just shutdown the cluster on both the exit of client that
> >>> running
> >>>>>> inside
> >>>>>>>> cluster and the finish of job.
> >>>>>>>> Since client is running inside cluster we can easily wait for the
> >>>> end
> >>>>> of
> >>>>>>>> two both in ClusterEntrypoint.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Zili Chen <wander4...@gmail.com> 于2019年9月27日周五 下午3:13写道:
> >>>>>>>>
> >>>>>>>>> About JobCluster
> >>>>>>>>>
> >>>>>>>>> Actually I am not quite sure what we gains from DETACHED
> >>>>> configuration
> >>>>>> on
> >>>>>>>>> cluster side.
> >>>>>>>>> We don't have a NON-DETACHED JobCluster in fact in our codebase,
> >>>>> right?
> >>>>>>>>>
> >>>>>>>>> It comes to me one major questions we have to answer first.
> >>>>>>>>>
> >>>>>>>>> *What JobCluster conceptually is exactly*
> >>>>>>>>>
> >>>>>>>>> Related discussion can be found in JIRA[1] and mailing list[2].
> >>>>> Stephan
> >>>>>>>>> gives a nice
> >>>>>>>>> description of JobCluster:
> >>>>>>>>>
> >>>>>>>>> Two things to add: - The job mode is very nice in the way that
> >>> it
> >>>>> runs
> >>>>>>>> the
> >>>>>>>>> client inside the cluster (in the same image/process that is the
> >>>> JM)
> >>>>>> and
> >>>>>>>>> thus unifies both applications and what the Spark world calls
> >>> the
> >>>>>> "driver
> >>>>>>>>> mode". - Another thing I would add is that during the FLIP-6
> >>>> design,
> >>>>> we
> >>>>>>>>> were thinking about setups where Dispatcher and JobManager are
> >>>>> separate
> >>>>>>>>> processes. A Yarn or Mesos Dispatcher of a session could run
> >>>>>>>> independently
> >>>>>>>>> (even as privileged processes executing no code). Then you the
> >>>>>> "per-job"
> >>>>>>>>> mode could still be helpful: when a job is submitted to the
> >>>>> dispatcher,
> >>>>>>>> it
> >>>>>>>>> launches the JM again in a per-job mode, so that JM and TM
> >>>> processes
> >>>>>> are
> >>>>>>>>> bound to teh job only. For higher security setups, it is
> >>> important
> >>>>> that
> >>>>>>>>> processes are not reused across jobs.
> >>>>>>>>>
> >>>>>>>>> However, currently in "per-job" mode we generate JobGraph in
> >>> client
> >>>>>> side,
> >>>>>>>>> launching
> >>>>>>>>> the JobCluster and retrieve the JobGraph for execution. So
> >>>> actually,
> >>>>> we
> >>>>>>>>> don't "run the
> >>>>>>>>> client inside the cluster".
> >>>>>>>>>
> >>>>>>>>> Besides, refer to the discussion with Till[1], it would be
> >>> helpful
> >>>> we
> >>>>>>>>> follow the same process
> >>>>>>>>> of session mode for that of "per-job" mode in user perspective,
> >>>> that
> >>>>> we
> >>>>>>>>> don't use
> >>>>>>>>> OptimizedPlanEnvironment to create JobGraph, but directly deploy
> >>>>> Flink
> >>>>>>>>> cluster in env.execute.
> >>>>>>>>>
> >>>>>>>>> Generally 2 points
> >>>>>>>>>
> >>>>>>>>> 1. Running Flink job by invoke user main method and execute
> >>>>> throughout,
> >>>>>>>>> instead of create
> >>>>>>>>> JobGraph from main-class.
> >>>>>>>>> 2. Run the client inside the cluster.
> >>>>>>>>>
> >>>>>>>>> If 1 and 2 are implemented. There is obvious no need for
> >>> DETACHED
> >>>>> mode
> >>>>>> in
> >>>>>>>>> cluster side
> >>>>>>>>> because we just shutdown the cluster on the exit of client that
> >>>>> running
> >>>>>>>>> inside cluster. Whether
> >>>>>>>>> or not delivered the result is up to user code.
> >>>>>>>>>
> >>>>>>>>> [1]
> >>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://issues.apache.org/jira/browse/FLINK-14051?focusedCommentId=16931388&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16931388
> >>>>>>>>> [2]
> >>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://lists.apache.org/x/thread.html/e8f14a381be6c027e8945f884c3cfcb309ce49c1ba557d3749fca495@%3Cdev.flink.apache.org%3E
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Zili Chen <wander4...@gmail.com> 于2019年9月27日周五 下午2:13写道:
> >>>>>>>>>
> >>>>>>>>>> Thanks for your replies Kostas & Aljoscha!
> >>>>>>>>>>
> >>>>>>>>>> Below are replies point by point.
> >>>>>>>>>>
> >>>>>>>>>> 1. For DETACHED mode, what I said there is about the DETACHED
> >>> mode
> >>>>> in
> >>>>>>>>>> client side.
> >>>>>>>>>> There are two configurations overload the item DETACHED[1].
> >>>>>>>>>>
> >>>>>>>>>> In client side, it means whether or not client.submitJob is
> >>>> blocking
> >>>>>> to
> >>>>>>>>>> job execution result.
> >>>>>>>>>> Due to client.submitJob returns CompletableFuture<JobClient>
> >>>>>>>> NON-DETACHED
> >>>>>>>>>> is no
> >>>>>>>>>> power at all. Caller of submitJob makes the decision whether or
> >>>> not
> >>>>>>>>>> blocking to get the
> >>>>>>>>>> JobClient and request for the job execution result. If client
> >>>>> crashes,
> >>>>>>>> it
> >>>>>>>>>> is a user scope
> >>>>>>>>>> exception that should be handled in user code; if client lost
> >>>>>> connection
> >>>>>>>>>> to cluster, we have
> >>>>>>>>>> a retry times and interval configuration that automatically
> >>> retry
> >>>>> and
> >>>>>>>>>> throws an user scope
> >>>>>>>>>> exception if exceed.
> >>>>>>>>>>
> >>>>>>>>>> Your comment about poll for result or job result sounds like a
> >>>>> concern
> >>>>>>>> on
> >>>>>>>>>> cluster side.
> >>>>>>>>>>
> >>>>>>>>>> In cluster side, DETACHED mode is alive only in JobCluster. If
> >>>>>> DETACHED
> >>>>>>>>>> configured,
> >>>>>>>>>> JobCluster exits on job finished; if NON-DETACHED configured,
> >>>>>> JobCluster
> >>>>>>>>>> exits on job
> >>>>>>>>>> execution result delivered. FLIP-74 doesn't stick to changes on
> >>>> this
> >>>>>>>>>> scope, it is just remained.
> >>>>>>>>>>
> >>>>>>>>>> However, it is an interesting part we can revisit this
> >>>>> implementation
> >>>>>> a
> >>>>>>>>>> bit.
> >>>>>>>>>>
> >>>>>>>>>> <see the next email for compact reply in this one>
> >>>>>>>>>>
> >>>>>>>>>> 2. The retrieval of JobClient is so important that if we don't
> >>>> have
> >>>>> a
> >>>>>>>> way
> >>>>>>>>>> to retrieve JobClient it is
> >>>>>>>>>> a dumb public user-facing interface(what a strange state :P).
> >>>>>>>>>>
> >>>>>>>>>> About the retrieval of JobClient, as mentioned in the document,
> >>>> two
> >>>>>> ways
> >>>>>>>>>> should be supported.
> >>>>>>>>>>
> >>>>>>>>>> (1). Retrieved as return type of job submission.
> >>>>>>>>>> (2). Retrieve a JobClient of existing job.(with job id)
> >>>>>>>>>>
> >>>>>>>>>> I highly respect your thoughts about how Executors should be
> >>> and
> >>>>>>>> thoughts
> >>>>>>>>>> on multi-layered clients.
> >>>>>>>>>> Although, (2) is not supported by public interfaces as summary
> >>> of
> >>>>>>>>>> discussion above, we can discuss
> >>>>>>>>>> a bit on the place of Executors on multi-layered clients and
> >>> find
> >>>> a
> >>>>>> way
> >>>>>>>>>> to retrieve JobClient of
> >>>>>>>>>> existing job with public client API. I will comment in FLIP-73
> >>>>>> thread[2]
> >>>>>>>>>> since it is almost about Executors.
> >>>>>>>>>>
> >>>>>>>>>> Best,
> >>>>>>>>>> tison.
> >>>>>>>>>>
> >>>>>>>>>> [1]
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://docs.google.com/document/d/1E-8UjOLz4QPUTxetGWbU23OlsIH9VIdodpTsxwoQTs0/edit?disco=AAAADnLLvM8
> >>>>>>>>>> [2]
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://lists.apache.org/x/thread.html/dc3a541709f96906b43df4155373af1cd09e08c3f105b0bd0ba3fca2@%3Cdev.flink.apache.org%3E
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Kostas Kloudas <kklou...@gmail.com> 于2019年9月25日周三 下午9:29写道:
> >>>>>>>>>>
> >>>>>>>>>>> Hi Tison,
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks for the FLIP and launching the discussion!
> >>>>>>>>>>>
> >>>>>>>>>>> As a first note, big +1 on providing/exposing a JobClient to
> >>> the
> >>>>>> users!
> >>>>>>>>>>>
> >>>>>>>>>>> Some points that would be nice to be clarified:
> >>>>>>>>>>> 1) You mention that we can get rid of the DETACHED mode: I
> >>> agree
> >>>>> that
> >>>>>>>>>>> at a high level, given that everything will now be
> >>> asynchronous,
> >>>>>> there
> >>>>>>>>>>> is no need to keep the DETACHED mode but I think we should
> >>>> specify
> >>>>>>>>>>> some aspects. For example, without the explicit separation of
> >>> the
> >>>>>>>>>>> modes, what happens when the job finishes. Does the client
> >>>>>>>>>>> periodically poll for the result always or the result is
> >>> pushed
> >>>>> when
> >>>>>>>>>>> in NON-DETACHED mode? What happens if the client disconnects
> >>> and
> >>>>>>>>>>> reconnects?
> >>>>>>>>>>>
> >>>>>>>>>>> 2) On the "how to retrieve a JobClient for a running Job", I
> >>>> think
> >>>>>>>>>>> this is related to the other discussion you opened in the ML
> >>>> about
> >>>>>>>>>>> multi-layered clients. First of all, I agree that exposing
> >>>>> different
> >>>>>>>>>>> "levels" of clients would be a nice addition, and actually
> >>> there
> >>>>> have
> >>>>>>>>>>> been some discussions about doing so in the future. Now for
> >>> this
> >>>>>>>>>>> specific discussion:
> >>>>>>>>>>>     i) I do not think that we should expose the
> >>>>>>>>>>> ClusterDescriptor/ClusterSpecification to the user, as this
> >>> ties
> >>>> us
> >>>>>> to
> >>>>>>>>>>> a specific architecture which may change in the future.
> >>>>>>>>>>>    ii) I do not think it should be the Executor that will
> >>>> provide
> >>>>> a
> >>>>>>>>>>> JobClient for an already running job (only for the Jobs that
> >>> it
> >>>>>>>>>>> submits). The job of the executor should just be to execute()
> >>> a
> >>>>>>>>>>> pipeline.
> >>>>>>>>>>>    iii) I think a solution that respects the separation of
> >>>>> concerns
> >>>>>>>>>>> could be the addition of another component (in the future),
> >>>>> something
> >>>>>>>>>>> like a ClientFactory, or ClusterFactory that will have methods
> >>>>> like:
> >>>>>>>>>>> ClusterClient createCluster(Configuration), JobClient
> >>>>>>>>>>> retrieveJobClient(Configuration , JobId), maybe even (although
> >>>> not
> >>>>>>>>>>> sure) Executor getExecutor(Configuration ) and maybe more.
> >>> This
> >>>>>>>>>>> component would be responsible to interact with a cluster
> >>> manager
> >>>>>> like
> >>>>>>>>>>> Yarn and do what is now being done by the ClusterDescriptor
> >>> plus
> >>>>> some
> >>>>>>>>>>> more stuff.
> >>>>>>>>>>>
> >>>>>>>>>>> Although under the hood all these abstractions (Environments,
> >>>>>>>>>>> Executors, ...) underneath use the same clients, I believe
> >>> their
> >>>>>>>>>>> job/existence is not contradicting but they simply hide some
> >>> of
> >>>> the
> >>>>>>>>>>> complexity from the user, and give us, as developers some
> >>> freedom
> >>>>> to
> >>>>>>>>>>> change in the future some of the parts. For example, the
> >>> executor
> >>>>>> will
> >>>>>>>>>>> take a Pipeline, create a JobGraph and submit it, instead of
> >>>>>> requiring
> >>>>>>>>>>> the user to do each step separately. This allows us to, for
> >>>>> example,
> >>>>>>>>>>> get rid of the Plan if in the future everything is DataStream.
> >>>>>>>>>>> Essentially, I think of these as layers of an onion with the
> >>>>> clients
> >>>>>>>>>>> being close to the core. The higher you go, the more
> >>>> functionality
> >>>>> is
> >>>>>>>>>>> included and hidden from the public eye.
> >>>>>>>>>>>
> >>>>>>>>>>> Point iii) by the way is just a thought and by no means
> >>> final. I
> >>>>> also
> >>>>>>>>>>> like the idea of multi-layered clients so this may spark up
> >>> the
> >>>>>>>>>>> discussion.
> >>>>>>>>>>>
> >>>>>>>>>>> Cheers,
> >>>>>>>>>>> Kostas
> >>>>>>>>>>>
> >>>>>>>>>>> On Wed, Sep 25, 2019 at 2:21 PM Aljoscha Krettek <
> >>>>>> aljos...@apache.org>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>> Hi Tison,
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks for proposing the document! I had some comments on the
> >>>>>>>> document.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I think the only complex thing that we still need to figure
> >>> out
> >>>> is
> >>>>>>>> how
> >>>>>>>>>>> to get a JobClient for a job that is already running. As you
> >>>>>> mentioned
> >>>>>>>> in
> >>>>>>>>>>> the document. Currently I’m thinking that its ok to add a
> >>> method
> >>>> to
> >>>>>>>>>>> Executor for retrieving a JobClient for a running job by
> >>>> providing
> >>>>> an
> >>>>>>>> ID.
> >>>>>>>>>>> Let’s see what Kostas has to say on the topic.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Aljoscha
> >>>>>>>>>>>>
> >>>>>>>>>>>>> On 25. Sep 2019, at 12:31, Zili Chen <wander4...@gmail.com>
> >>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Hi all,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Summary from the discussion about introducing Flink
> >>> JobClient
> >>>>>>>> API[1]
> >>>>>>>>>>> we
> >>>>>>>>>>>>> draft FLIP-74[2] to
> >>>>>>>>>>>>> gather thoughts and towards a standard public user-facing
> >>>>>>>> interfaces.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> This discussion thread aims at standardizing job level
> >>> client
> >>>>> API.
> >>>>>>>>>>> But I'd
> >>>>>>>>>>>>> like to emphasize that
> >>>>>>>>>>>>> how to retrieve JobClient possibly causes further
> >>> discussion on
> >>>>>>>>>>> different
> >>>>>>>>>>>>> level clients exposed from
> >>>>>>>>>>>>> Flink so that a following thread will be started later to
> >>>>>>>> coordinate
> >>>>>>>>>>>>> FLIP-73 and FLIP-74 on
> >>>>>>>>>>>>> expose issue.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Looking forward to your opinions.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Best,
> >>>>>>>>>>>>> tison.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> [1]
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://lists.apache.org/thread.html/ce99cba4a10b9dc40eb729d39910f315ae41d80ec74f09a356c73938@%3Cdev.flink.apache.org%3E
> >>>>>>>>>>>>> [2]
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>> --
> >>>>>
> >>>>> 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
> >>>>>
> >>>>
> >>>
> >>>
> >>> --
> >>>
> >>> 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