Since we didn't get any new feedback from the reporters, +1 for closing FLINK-30238 according to the analysis done by Gordon, Martijn, and Alex. Happy to see we can move a little bit forward. Thanks for your effort!
Best regards, Jing On Tue, Oct 31, 2023 at 3:03 AM Yun Gao <gaoyunh...@apache.org> wrote: > Hi Martijn and Gordon, > > Very sorry for the very late reply, +1 for close FLINK-30238 and open > dedicated issues > for the remaining issues. > > Best, > Yun > > On Mon, Oct 30, 2023 at 6:42 PM Martijn Visser <martijnvis...@apache.org> > wrote: > > > > Hi everyone, > > > > I would like to +1 Gordon's proposal to close FLINK-30238, create a > > new follow-up ticket and try to address the specific > > PostCommitTopology in the work that's currently being done by Peter on > > SinkV2. If there's no feedback on this topic, I assume everyone's OK > > with that. > > > > Best regards, > > > > Martijn > > > > On Fri, Sep 29, 2023 at 8:11 AM Tzu-Li (Gordon) Tai <tzuli...@apache.org> > wrote: > > > > > > Hi everyone, > > > > > > It’s been a while since this topic was last discussed, but > nevertheless, it > > > still remains very desirable to figure out a clear path towards making > > > SinkV2 @Public. > > > > > > There’s a new thread [1] that has a pretty good description on missing > > > features in SinkV2 from the Iceberg connector’s perspective, which > prevents > > > them from migrating - anything related to those new requirements, let's > > > discuss there. > > > > > > Nevertheless, I think we should also revive and reuse this thread to > reach > > > consensus / closure on all concerns already brought up here. > > > > > > It’s quite a long thread where a lot of various concerns were brought > up, > > > but I’d start by addressing two very specific ones: FLIP-287 [2] and > > > FLINK-30238 [3] > > > > > > First of all, FLIP-287 has been approved and merged already, and will > be > > > released with 1.18.0. So, connector migrations that were waiting on > this > > > should hopefully be unblocked after the release. So this seems to no > longer > > > be a concern - let’s see things through with those connectors actually > > > being migrated. > > > > > > FLINK-30238 is sort of a confusing one, and I do believe it is > (partially) > > > a false alarm. After looking into this, the problem reported there > > > essentially breaks down to two things: > > > 1) TwoPhaseCommittingSink is unable to take a new savepoint after > restoring > > > from a savepoint generated via `stop-with-savepoint --drain` > > > 2) SinkV2 sinks with a PostCommitTopology do not properly have > post-commits > > > completed after a stop-with-savepoint operation, since committed > > > commitables are not emitted to the post-commit topology after the > committer > > > receives the end-of-input signal. > > > > > > My latest comment in [3] explains this in a bit more detail. > > > > > > I believe we can conclude that problem 1) is a non-concern - users > should > > > not restore from a job that is drained on stop-with-savepoint and > cannot > > > expect the restored job to function normally. > > > Problem 2) remains a real issue though, and to help clear things up I > think > > > we should close FLINK-30238 in favor of a new ticket scoped to the > specific > > > PostCommitTopology problem. > > > > > > The other open concerns seem to mostly be around graduation criteria > and > > > process - I've yet to go through those and will follow up with a > separate > > > reply (or perhaps Martijn can help wrap up that part?). > > > > > > Thanks, > > > Gordon > > > > > > [1] https://lists.apache.org/thread/h3kg7jcgjstpvwlhnofq093vk93ylgsn > > > [2] > > > > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=240880853 > > > [3] https://issues.apache.org/jira/browse/FLINK-30238 > > > > > > On Mon, Feb 13, 2023 at 2:50 AM Jing Ge <j...@ververica.com.invalid> > wrote: > > > > > > > @Martijn > > > > > > > > What I shared previously is the fact of the current KafkaSink. > Following > > > > your suggestion, the KafkaSink should still be marked as > @Experimental for > > > > now which will need even longer time to graduate. BTW, KafkaSink > does not > > > > depend on any @Internal interfaces. The @Internal is used for methods > > > > coming from @PublicEvolving SinkV2 interfaces, not interfaces > themself. > > > > Thanks for bringing this topic up. Currently, there is no rule > defined to > > > > say that no @Internal is allowed for methods implemented > > > > from @PublicEvolving interfaces. Further (off-this-topic) discussion > might > > > > be required to check if it really makes sense to define such a rule, > since > > > > some methods defined in interfaces might only be used internally, > i.e. no > > > > connector user would be aware of them. > > > > > > > > @Dong > > > > > > > > I agree with everything you said and especially can't agree more to > let > > > > developers who will own it make the decision. > > > > > > > > Best regards, > > > > Jing > > > > > > > > > > > > On Sun, Feb 12, 2023 at 2:53 AM Dong Lin <lindon...@gmail.com> > wrote: > > > > > > > > > Hi Martijn, > > > > > > > > > > Thanks for the reply. Please see my comments inline. > > > > > > > > > > Regards, > > > > > Dong > > > > > > > > > > On Sat, Feb 11, 2023 at 4:31 AM Martijn Visser < > martijnvis...@apache.org > > > > > > > > > > wrote: > > > > > > > > > > > Hi all, > > > > > > > > > > > > I wanted to get back on a couple of comments and have a proposal > at the > > > > > end > > > > > > for the next steps: > > > > > > > > > > > > @Steven Wu > > > > > > If I look back at the original discussion of FLIP-191 and also > the > > > > thread > > > > > > that you're referring to, it appears from the discussion with > Yun Gao > > > > > that > > > > > > the solution was in near-sight, but just not finished. Perhaps > it needs > > > > > to > > > > > > be restarted once more so it can be brought to a closure. Also > when I > > > > > > looked back at the original introduction of SinkV2, there was > > > > FLINK-25726 > > > > > > [1] which looks like it was built specifically for Iceberg and > Delta > > > > > Sink? > > > > > > > > > > > > @Jing > > > > > > > All potential unstable methods coming from SinkV2 interfaces > will be > > > > > kept > > > > > > marked as @internal. > > > > > > > > > > > > This is a situation that I think should be avoided: if it's > unstable, > > > > it > > > > > > should be marked as @Experimental. Connectors should not need to > rely > > > > > > on @Internal interfaces; if they are needed by a connector, a > > > > maintainer > > > > > > should create a proposal to expose. > > > > > > > > > > > > On the production readiness of SinkV2: > > > > > > > > > > > > @Dong > > > > > > > And Yuxia mentioned earlier in this thread that there are bugs > such > > > > as > > > > > > FLINK-30238 <https://issues.apache.org/jira/browse/FLINK-30238> > and > > > > > > FLINK-29459 <https://issues.apache.org/jira/browse/FLINK-29459> > , > > > > which > > > > > > makes it hard to use SinkV2 properly in production. > > > > > > > > > > > > @Jark > > > > > > > The follow-up step should be trying the new APIs in > externalized > > > > > > connectors and giving users the confidence to migrate. > > > > > > > > > > > > I think that is not a fair assessment of the situation. Given > that > > > > Kafka, > > > > > > Elasticsearch, FileSink and everything that uses the AsyncSink > is on > > > > > SinkV2 > > > > > > since Flink 1.15 and the popularity of these connectors, they > have > > > > > > definitely already proven themselves. That's not to downplay > that bugs > > > > > have > > > > > > no impact and shouldn't be resolved, but I don't think it's fair > to > > > > state > > > > > > that SinkV2 is not stable or usable in production. > > > > > > > > > > > > > > > > I believe there exist jobs that are currently using SinkV2 (e.g. > Kafka, > > > > > FileSink) in production. The questions are whether 1) SinkV2 is > ready to > > > > > support all features of all existing SinkFunction; and 2) whether > all > > > > those > > > > > connectors (e.g. Kafka) are ready to support all features of their > > > > > SinkFunction version (e.g. FlinkKafkaProducer) reliable without > critical > > > > > bugs (e.g. losing data). > > > > > > > > > > If we can not answer "yes" to the above two questions, then we > probably > > > > can > > > > > not say that SinkV2 is usable in production in general, even > though we > > > > can > > > > > still say that some source/sink based on SinkV2 is usable in > production > > > > in > > > > > selected scenarios (e.g. maybe those jobs that do not use on > savepoint). > > > > > > > > > > Maybe we can use FLINK-30238 > > > > > <https://issues.apache.org/jira/browse/FLINK-30238> to explain > this > > > > point. > > > > > The JIRA's description basically says that "there is the risk of > losing > > > > > data if we use stop-with-savepoint with SinkV2". Do you know > whether this > > > > > might potentially affect those SinkV2 (e.g. Kafka, FileSink) jobs > in > > > > > production when they are restarted with savepoint? > > > > > > > > > > > > > > > > > > > > > > > > > > > Coming back to the original topic of this thread, my proposal > would be > > > > > that > > > > > > in Flink 1.17: > > > > > > > > > > > > 1. SinkV2 gets promoted from @PublicEvolving to @Public, which > also > > > > > means: > > > > > > > > > > > > > > > > I believe we have agreed to address the issues with SinkV2. Now the > > > > > question is, how likely would the solutions require backward > incompatible > > > > > change to SinkV2. > > > > > > > > > > For example, do you think the following questions (mentioned > earlier in > > > > > this thread) would require backward incompatible changes? > > > > > - Sink.InitContext still lacks some necessary information to > migrate > > > > > existing connectors to new sinks > > > > > - Address FLINK-30238 and FLINK-29459. > > > > > - Find the migration path for the Iceberg sink > > > > > > > > > > IMO, it seems safer to mark an interface as @Public when we are > pretty > > > > sure > > > > > that there is no known issue in the near future that would require > > > > > backward-incompatible changes to the interface. > > > > > > > > > > Note that the cost of making an interface @Public lies on the > > > > developer(s) > > > > > who owns the task of updating SinkV2 to address those known issues > (e.g. > > > > > migration). Maybe we should find the developers who will own this > task > > > > and > > > > > let them decide whether to mark it @Public? > > > > > > > > > > > > > > > a. KafkaSink gets promoted from @PublicEvolving to @Public (which > solves > > > > > > the weird thing that FlinkKafkaProducer is already marked as > deprecated > > > > > > since Flink 1.14 and points to KafkaSink as a successor) > > > > > > b. FileSink gets promoted from @Experimental to @PublicEvolving > (note: > > > > > this > > > > > > has been marked as @Experimental since Flink 1.12, so one could > argue > > > > > that > > > > > > this needs to be bumped to @Public too. The reason why I didn't > do it > > > > is > > > > > > because of Yuxia's remark that FileSystemTableSink is still using > > > > > > SinkFunction) > > > > > > c. ElasticsearchSink gets promoted from @PublicEvolving to > @Public (has > > > > > > been externalized so needs to happen there) > > > > > > d. The AWS connectors (Firehose, Kinesis) get promoted from > > > > > @PublicEvolving > > > > > > to @Public (has been externalized so needs to happen there) > > > > > > e. It's up to the maintainers for DynamoDB and Opensearch to > decide > > > > this > > > > > > themselves, given that I believe they've only been introduced > recently > > > > > and > > > > > > support only Flink 1.16. > > > > > > > > > > > > 2. For the next Flink release, the community needs to establish > what > > > > are > > > > > > features that are currently not available in SinkV2 (e.g. > FLIP-287), if > > > > > > such a feature should be made available in SinkV2 (in case it's a > > > > feature > > > > > > which currently resides in SinkFunction, while from new insights > we > > > > think > > > > > > it should now be solved differently) and then get these > implemented > > > > asap. > > > > > > > > > > > > Best regards, > > > > > > > > > > > > Martijn > > > > > > > > > > > > [1] https://issues.apache.org/jira/browse/FLINK-25726 > > > > > > > > > > > > > > > > > > On Tue, Feb 7, 2023 at 5:11 AM Steven Wu <stevenz...@gmail.com> > wrote: > > > > > > > > > > > > > > Regarding the discussion on global committer [1] for sinks > with > > > > > global > > > > > > > transactions, there is no consensus on solving that problem in > > > > SinkV2. > > > > > > Will > > > > > > > it require any breaking change in SinkV2? > > > > > > > > > > > > > > Just want to reiterate my earlier question. What is the > migration > > > > path > > > > > > for > > > > > > > the Iceberg sink? > > > > > > > > > > > > > > [1] > https://lists.apache.org/thread/82bgvlton9olb591bfg2djv0cshj1bxj > > > > > > > > > > > > > > On Mon, Feb 6, 2023 at 6:22 PM Jark Wu <imj...@gmail.com> > wrote: > > > > > > > > > > > > > > > Hi Konstantin, > > > > > > > > > > > > > > > > I totally agree with making SinkV2 @Public. I just have > concerns > > > > > about > > > > > > > > deprecating SinkFunction at this point. Dong Lin has raised > the > > > > > blocker > > > > > > > > issues of migration multiple times in this thread which I > think we > > > > > > should > > > > > > > > address first. I don't know why we rush to deprecate > SinkFunction > > > > > while > > > > > > > > SourceFunction is still public, but the new Source API is > much more > > > > > > > stable > > > > > > > > and production-ready than SinkV2. > > > > > > > > > > > > > > > > Iceberg community raised concerns[1] about the workability > and > > > > > > stability > > > > > > > of > > > > > > > > Flink connector APIs. > > > > > > > > > > > > > > > > We are hoping any issues with the APIs for Iceberg connector > will > > > > > > surface > > > > > > > > > sooner and get more attention from the Flink community > when the > > > > > > > connector > > > > > > > > > is within Flink umbrella rather than in Iceberg repo. > > > > > > > > > > > > > > > > > > > > > > > > The connector externalizing is a big step for building a > mechanism > > > > to > > > > > > > > guarantee Flink connector API is stable and workable. The > follow-up > > > > > > step > > > > > > > > should be trying the new APIs in externalized connectors and > giving > > > > > > users > > > > > > > > the confidence to migrate. > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > Jark > > > > > > > > > > > > > > > > [1]: > > > > > https://lists.apache.org/thread/r5zqnkt01x2c611brkjmxxnt3bfcgl1b > > > > > > > > > > > > > > > > On Tue, 7 Feb 2023 at 09:53, yuxia < > luoyu...@alumni.sjtu.edu.cn> > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi Konstantin, > > > > > > > > > Just FYI, the FileSystemTableSink are still using > SinkFunction. > > > > > > > > > > > > > > > > > > Best regards, > > > > > > > > > Yuxia > > > > > > > > > > > > > > > > > > ----- 原始邮件 ----- > > > > > > > > > 发件人: "Dong Lin" <lindon...@gmail.com> > > > > > > > > > 收件人: "dev" <dev@flink.apache.org> > > > > > > > > > 抄送: "Jing Ge" <j...@ververica.com>, "Yun Tang" < > myas...@live.com > > > > > > > > > > > > > > 发送时间: 星期二, 2023年 2 月 07日 上午 9:41:07 > > > > > > > > > 主题: Re: [DISCUSS] Promote SinkV2 to @Public and deprecate > > > > > > SinkFunction > > > > > > > > > > > > > > > > > > Hi Konstantin, > > > > > > > > > > > > > > > > > > Thanks for the reply. Please see my comments inline. > > > > > > > > > > > > > > > > > > On Mon, Feb 6, 2023 at 9:48 PM Konstantin Knauf < > > > > kna...@apache.org > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Hi Steven, > > > > > > > > > > > > > > > > > > > > Sink is already deprecated. It was deprecated at the > moment > > > > where > > > > > > we > > > > > > > > > > introduced SinkV2. > > > > > > > > > > > > > > > > > > > > Hi Jark, Hi Dong, > > > > > > > > > > > > > > > > > > > > My understanding is the SinkV2 is a workable interface. > The > > > > most > > > > > > > > > important > > > > > > > > > > connectors have been migrated (Kafka, Filesystem) and > more > > > > > > connectors > > > > > > > > > > (OpenSearch, ElasticSearch, Kinesis) use it > successfully. To > > > > make > > > > > > > > SinkV2 > > > > > > > > > > public, it does not need to have all possible > functionality. > > > > > Public > > > > > > > > APIs > > > > > > > > > > can be extended. That's what we do all the time. There > will > > > > also > > > > > > > always > > > > > > > > > be > > > > > > > > > > bugs. So, these points can not be categorical blockers to > > > > promote > > > > > > the > > > > > > > > > API. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Right. I believe we all agree that we make SinkV2 > > > > @PublicEvolving. > > > > > > The > > > > > > > > > concern here is whether we can mark SinkFunction as > deprecated at > > > > > > this > > > > > > > > > point. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > What are the specific issues/tickets that are blocking > us? Can > > > > we > > > > > > in > > > > > > > > your > > > > > > > > > > > > > > > > > > > > > > > > > > > > For example, Lijie mentioned earlier in this thread that > > > > according > > > > > to > > > > > > > > > FLIP-287, > > > > > > > > > currently the Sink.InitContext still lacks some necessary > > > > > information > > > > > > > to > > > > > > > > > migrate existing connectors to new sinks. This could be a > blocker > > > > > > issue > > > > > > > > > since this is related to the SinkV2 API design. > > > > > > > > > > > > > > > > > > And Yuxia mentioned earlier in this thread that there are > bugs > > > > such > > > > > > as > > > > > > > > > FLINK-30238 < > https://issues.apache.org/jira/browse/FLINK-30238> > > > > > and > > > > > > > > > FLINK-29459 < > https://issues.apache.org/jira/browse/FLINK-29459> > > > > , > > > > > > > which > > > > > > > > > makes it hard to use SinkV2 properly in production. It > seems > > > > that > > > > > > > these > > > > > > > > > two bugs are created months ago and are still unresolved > or even > > > > > > > > > unassigned. This looks like a clear signal that SinkV2 is > not > > > > being > > > > > > > > > actively maintained and used in production. > > > > > > > > > > > > > > > > > > > > > > > > > > > > opinion only deprecate it when every single connector in > Apache > > > > > > Flink > > > > > > > > is > > > > > > > > > > migrated already? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Technically this is not a hard requirement. But I would > suggest > > > > > that > > > > > > we > > > > > > > > > should migrate all existing connectors so that we eat our > own > > > > > dogfood > > > > > > > and > > > > > > > > > prove to users that SinkV2 is ready for use in production. > > > > > > > > > > > > > > > > > > > > > > > > > > > > In my opinion it is the time to ask users to the migrate > their > > > > > > > > > connectors. > > > > > > > > > > More importantly, @Deprecated would signal users not to > build > > > > new > > > > > > > > > > connectors on SinkFunction. I would arque its also very > > > > > misleading > > > > > > to > > > > > > > > > users > > > > > > > > > > to not @Deprecated SinkFunction given that is clearly > will be > > > > > > > > deprecated. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > > > > > > > > Konstantin > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Am Mo., 6. Feb. 2023 um 13:26 Uhr schrieb Jark Wu < > > > > > > imj...@gmail.com > > > > > > > >: > > > > > > > > > > > > > > > > > > > > > I agree with Dong Lin. > > > > > > > > > > > > > > > > > > > > > > Oracle explains how to use Deprecate API [1]: > > > > > > > > > > > > > > > > > > > > > > You are strongly recommended to use the Javadoc > @deprecated > > > > tag > > > > > > > with > > > > > > > > > > > > appropriate comments explaining how to use the new > API. > > > > This > > > > > > > > ensures > > > > > > > > > > > > developers will *have a workable migration path from > the > > > > old > > > > > > API > > > > > > > to > > > > > > > > > the > > > > > > > > > > > > new API*. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > From a user's perspective, the workable migration path > is > > > > very > > > > > > > > > important. > > > > > > > > > > > Otherwise, it blurs the semantics of API deprecation. > The > > > > Flink > > > > > > > API's > > > > > > > > > > > compatibility and stability issues in the past left a > bad > > > > > > > impression > > > > > > > > on > > > > > > > > > > the > > > > > > > > > > > downstream projects. We should be careful when > changing and > > > > > > > > deprecating > > > > > > > > > > > APIs, especially when there are known migration gaps. > I think > > > > > > it's > > > > > > > a > > > > > > > > > good > > > > > > > > > > > idea to migrate Flink-owned connectors before marking > old API > > > > > > > > > deprecated. > > > > > > > > > > > This ensures downstream projects can migrate to new > APIs > > > > > > smoothly. > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > Jark > > > > > > > > > > > > > > > > > > > > > > [1]: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/deprecation/deprecation.html > > > > > > > > > > > > > > > > > > > > > > On Mon, 6 Feb 2023 at 10:01, Steven Wu < > stevenz...@gmail.com > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Regarding the discussion on global committer [1] for > sinks > > > > > with > > > > > > > > > global > > > > > > > > > > > > transactions, there is no consensus on solving that > problem > > > > > in > > > > > > > > > SinkV2. > > > > > > > > > > > Will > > > > > > > > > > > > it require any breaking change in SinkV2? > > > > > > > > > > > > > > > > > > > > > > > > Also will SinkV1 be deprecated too? or it should > happen > > > > > > sometime > > > > > > > > > after > > > > > > > > > > > > SinkFunction deprecation? > > > > > > > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > https://lists.apache.org/thread/82bgvlton9olb591bfg2djv0cshj1bxj > > > > > > > > > > > > > > > > > > > > > > > > On Sun, Feb 5, 2023 at 2:14 AM Dong Lin < > > > > lindon...@gmail.com > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Hi Konstantin, > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the comment! Please see my comment > inline. > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > Dong > > > > > > > > > > > > > > > > > > > > > > > > > > On Sat, Feb 4, 2023 at 2:06 AM Konstantin Knauf < > > > > > > > > kna...@apache.org > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi everyone, > > > > > > > > > > > > > > > > > > > > > > > > > > > > sorry for joining the discussion late. > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1) Is there an option to deprecate SinkFunction > in > > > > Flink > > > > > > 1.17 > > > > > > > > > while > > > > > > > > > > > > > leaving > > > > > > > > > > > > > > SinkV2 @PublicEvolving in Flink 1.17. We then > aim to > > > > make > > > > > > > > SinkV2 > > > > > > > > > > > > @Public > > > > > > > > > > > > > in > > > > > > > > > > > > > > and remove SinkFunction in Flink 1.18. > @PublicEvolving > > > > > are > > > > > > > > > intended > > > > > > > > > > > for > > > > > > > > > > > > > > public use. So, I don't see it as a blocker for > > > > > deprecating > > > > > > > > > > > > SinkFunction > > > > > > > > > > > > > > that we have to make SinkV2 @PublicEvovling. For > > > > > reference > > > > > > > this > > > > > > > > > is > > > > > > > > > > > the > > > > > > > > > > > > > > description of @PublicEvovling: > > > > > > > > > > > > > > > > > > > > > > > > > > > > /** > > > > > > > > > > > > > > * Annotation to mark classes and methods for > public > > > > use, > > > > > > but > > > > > > > > > with > > > > > > > > > > > > > > evolving interfaces. > > > > > > > > > > > > > > * > > > > > > > > > > > > > > * <p>Classes and methods with this annotation > are > > > > > intended > > > > > > > for > > > > > > > > > > > public > > > > > > > > > > > > > > use and have stable behavior. > > > > > > > > > > > > > > * However, their interfaces and signatures are > not > > > > > > > considered > > > > > > > > to > > > > > > > > > > be > > > > > > > > > > > > > > stable and might be changed > > > > > > > > > > > > > > * across versions. > > > > > > > > > > > > > > * > > > > > > > > > > > > > > * <p>This annotation also excludes methods and > classes > > > > > > with > > > > > > > > > > evolving > > > > > > > > > > > > > > interfaces / signatures within > > > > > > > > > > > > > > * classes annotated with {@link Public}. > > > > > > > > > > > > > > */ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Marking SinkFunction @Deprecated would already > single > > > > > > > everyone > > > > > > > > to > > > > > > > > > > > move > > > > > > > > > > > > to > > > > > > > > > > > > > > SinkV2, which we as a community, I believe, have > a > > > > strong > > > > > > > > > interest > > > > > > > > > > > in. > > > > > > > > > > > > > Its > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Yes, I also believe we all have this strong > interest. I > > > > > just > > > > > > > hope > > > > > > > > > > that > > > > > > > > > > > > this > > > > > > > > > > > > > can be done in the best possible way that does not > > > > confuse > > > > > > > users. > > > > > > > > > > > > > > > > > > > > > > > > > > I probably still have the same concern regarding > its > > > > impact > > > > > > on > > > > > > > > > users: > > > > > > > > > > > if > > > > > > > > > > > > we > > > > > > > > > > > > > mark an API as deprecated, it effectively means > the users > > > > > of > > > > > > > this > > > > > > > > > API > > > > > > > > > > > > > should start to migrate to another API (e.g. > SinkV2) and > > > > we > > > > > > > might > > > > > > > > > > > remove > > > > > > > > > > > > > this API in the future. However, given that we > know there > > > > > are > > > > > > > > known > > > > > > > > > > > > > problems preventing users from doing so, it seems > that we > > > > > are > > > > > > > not > > > > > > > > > > ready > > > > > > > > > > > > to > > > > > > > > > > > > > send this message to users right. > > > > > > > > > > > > > > > > > > > > > > > > > > If I understand correctly, I guess you are > suggesting > > > > that > > > > > by > > > > > > > > > marking > > > > > > > > > > > > > SinkFunction as deprecated, we can put higher > pressure on > > > > > > Flink > > > > > > > > > > > > > contributors to update the existing Flink codebase > to > > > > > improve > > > > > > > and > > > > > > > > > use > > > > > > > > > > > > > SinkV2. > > > > > > > > > > > > > > > > > > > > > > > > > > I am not sure this is the right way to use > @deprecated, > > > > > which > > > > > > > > has a > > > > > > > > > > > > > particular meaning for its users rather than > > > > contributors. > > > > > > And > > > > > > > I > > > > > > > > am > > > > > > > > > > > also > > > > > > > > > > > > > not sure we can even pressure contributors of an > > > > > open-source > > > > > > > > > project > > > > > > > > > > > into > > > > > > > > > > > > > developing a feature (e.g. migrate all existing > > > > > SinkFunction > > > > > > > > > > subclasses > > > > > > > > > > > > to > > > > > > > > > > > > > SinkV2). IMO, the typical way is for the > contributor with > > > > > > > > > > interest/time > > > > > > > > > > > > to > > > > > > > > > > > > > work on the feature, or talk to other contributors > > > > whether > > > > > > they > > > > > > > > are > > > > > > > > > > > > willing > > > > > > > > > > > > > to collaborate/work on this, rather than > pressuring other > > > > > > > > > > contributors > > > > > > > > > > > > into > > > > > > > > > > > > > working on this. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > almost comical how long the transition from > > > > > > > > > > > SourceFurnction/SinkFunction > > > > > > > > > > > > to > > > > > > > > > > > > > > Source/Sink takes us. At the same time, we leave > > > > > ourselves > > > > > > > the > > > > > > > > > > option > > > > > > > > > > > > to > > > > > > > > > > > > > to > > > > > > > > > > > > > > make small changes to SinkV2 if any problems > arise > > > > during > > > > > > the > > > > > > > > > > > migration > > > > > > > > > > > > > of > > > > > > > > > > > > > > these connector. > > > > > > > > > > > > > > > > > > > > > > > > > > > > I think, we have a bit of a chicken/egg problem > here. > > > > The > > > > > > > > > pressure > > > > > > > > > > > for > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Similar to the reason described above, I am not > sure we > > > > > have > > > > > > a > > > > > > > > > > > > chicken/egg > > > > > > > > > > > > > problem here. The issue here is that SinkV2 is not > ready > > > > > and > > > > > > we > > > > > > > > > have > > > > > > > > > > a > > > > > > > > > > > > lot > > > > > > > > > > > > > of existing SinkFunction that is not migrated by > > > > ourselves. > > > > > > We > > > > > > > > > (Flink > > > > > > > > > > > > > contributors) probably do not need to mark > SinkFunction > > > > as > > > > > > > > > deprecated > > > > > > > > > > > in > > > > > > > > > > > > > order to address these issues in our own codebase. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > users and contributors is not high enough to move > away > > > > from > > > > > > > > > > > SinkFunction > > > > > > > > > > > > as > > > > > > > > > > > > > > long as its not deprecated, but at the same time > we > > > > need > > > > > > > people > > > > > > > > > to > > > > > > > > > > > > > migrate > > > > > > > > > > > > > > their connectors to see if there are any gaps in > > > > SinkV2. > > > > > I > > > > > > > > > believe, > > > > > > > > > > > the > > > > > > > > > > > > > > combination proposed above could bridge this > problem. > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2) I don't understand the argument of waiting > until > > > > some > > > > > of > > > > > > > the > > > > > > > > > > > > > > implementations are @Public. How can we make the > > > > > > > > implementations > > > > > > > > > of > > > > > > > > > > > the > > > > > > > > > > > > > > SinkV2 API @Public without making SinkV2 > @Public? All > > > > > > public > > > > > > > > > > methods > > > > > > > > > > > of > > > > > > > > > > > > > > SinkV2 are part of every implementation. So to > me it > > > > > > actually > > > > > > > > > seems > > > > > > > > > > > to > > > > > > > > > > > > be > > > > > > > > > > > > > > opposite: in order to make any of the > implementation > > > > > > @Public > > > > > > > we > > > > > > > > > > first > > > > > > > > > > > > > need > > > > > > > > > > > > > > to make the API @Public. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Yeah I also agree with you. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Konstantin > > > > > > > > > > > > > > > > > > > > > > > > > > > > Am Mo., 30. Jan. 2023 um 13:18 Uhr schrieb Dong > Lin < > > > > > > > > > > > > lindon...@gmail.com > > > > > > > > > > > > > >: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Martijn, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for driving this effort to clean-up the > Flink > > > > > > > > codebase! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I like the idea to cleanup Flink codebase to > avoid > > > > > having > > > > > > > two > > > > > > > > > > > Sinks. > > > > > > > > > > > > On > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > other hand, I also thing the concern mentioned > by > > > > Jing > > > > > > > makes > > > > > > > > > > sense. > > > > > > > > > > > > In > > > > > > > > > > > > > > > addition to thinking in terms of the rule > proposed in > > > > > > > > FLIP-197 > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-197%3A+API+stability+graduation+process > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > (which > > > > > > > > > > > > > > > seems to focus mostly on the Flink developers' > > > > > > > perspective), > > > > > > > > it > > > > > > > > > > > might > > > > > > > > > > > > > be > > > > > > > > > > > > > > > useful to also think about the story from > users' > > > > > > > perspective > > > > > > > > > and > > > > > > > > > > > make > > > > > > > > > > > > > > sure > > > > > > > > > > > > > > > their concerns can be addressed. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Typically, by marking an API as deprecated, we > are > > > > > > > > effectively > > > > > > > > > > > > telling > > > > > > > > > > > > > > > users *they should start to migrate to the new > API > > > > ASAP > > > > > > and > > > > > > > > we > > > > > > > > > > > > reserve > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > right to remove this API completely in the 1-2 > > > > > releases*. > > > > > > > > Then > > > > > > > > > it > > > > > > > > > > > > might > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > reasonable for users to ask questions such as: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1) Does SinkV2 public API provides all the > > > > > > functionalities > > > > > > > > > needed > > > > > > > > > > > to > > > > > > > > > > > > > > > migrate my existing code from subclassing > > > > SinkFunction > > > > > to > > > > > > > > > > > subclassing > > > > > > > > > > > > > > > SinkV2? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2) Is the amount of migration work reasonable? > If > > > > yes, > > > > > > why > > > > > > > > is a > > > > > > > > > > > class > > > > > > > > > > > > > > such > > > > > > > > > > > > > > > as HBaseSinkFunction in Flink's own codebase > still > > > > > > > depending > > > > > > > > on > > > > > > > > > > > > > > > SinkFunction? Maybe Flink developers should > eat their > > > > > own > > > > > > > dog > > > > > > > > > > food > > > > > > > > > > > > and > > > > > > > > > > > > > > > migrate (or deprecate) those classes in the > Flink > > > > > > codebase > > > > > > > > > first? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Based on the discussion in this thread, I am > not sure > > > > > we > > > > > > > have > > > > > > > > > > good > > > > > > > > > > > > > > answers > > > > > > > > > > > > > > > to those questions yet. For the 1st question > above, > > > > the > > > > > > > > answer > > > > > > > > > is > > > > > > > > > > > > *no* > > > > > > > > > > > > > > > because we already know that the SinkV2 is > currently > > > > > not > > > > > > > able > > > > > > > > > to > > > > > > > > > > > > > support > > > > > > > > > > > > > > > migration for JdbcSink. For the 2nd question > above, > > > > we > > > > > > know > > > > > > > > > there > > > > > > > > > > > are > > > > > > > > > > > > > > many > > > > > > > > > > > > > > > non-deprecated class in Flink codebase that > are still > > > > > > > > depending > > > > > > > > > > on > > > > > > > > > > > > > > SinkV2. > > > > > > > > > > > > > > > It is probably not nice to users if we tell > them to > > > > > > migrate > > > > > > > > > while > > > > > > > > > > > we > > > > > > > > > > > > > know > > > > > > > > > > > > > > > there are existing issues that can prevent > them from > > > > > > doing > > > > > > > so > > > > > > > > > > > easily. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > In order to move forward to deprecate SinkV2, > I think > > > > > it > > > > > > > will > > > > > > > > > be > > > > > > > > > > > > super > > > > > > > > > > > > > > > useful to first migrate all the connectors > managed by > > > > > > Flink > > > > > > > > > > > community > > > > > > > > > > > > > > > (including all externalized connectors) to use > > > > SinkV2. > > > > > > This > > > > > > > > > work > > > > > > > > > > > > won't > > > > > > > > > > > > > be > > > > > > > > > > > > > > > wasted since we need to do this anyway. And it > will > > > > > also > > > > > > > give > > > > > > > > > us > > > > > > > > > > a > > > > > > > > > > > > > chance > > > > > > > > > > > > > > > to validate the capabilities of SinkV2 and fix > bugs > > > > by > > > > > > > > > ourselves > > > > > > > > > > as > > > > > > > > > > > > > much > > > > > > > > > > > > > > as > > > > > > > > > > > > > > > possible. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > What do you think? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best Regards, > > > > > > > > > > > > > > > Dong > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Jan 18, 2023 at 6:52 PM Martijn Visser > < > > > > > > > > > > > > > martijnvis...@apache.org > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi all, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > While discussing FLIP-281 [1] the discussion > also > > > > > > turned > > > > > > > to > > > > > > > > > the > > > > > > > > > > > > > > > > SinkFunction and the SinkV2 API. For a > broader > > > > > > discussion > > > > > > > > I'm > > > > > > > > > > > > opening > > > > > > > > > > > > > > up > > > > > > > > > > > > > > > a > > > > > > > > > > > > > > > > separate discussion thread. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > As Yun Tang has mentioned in that discussion > > > > thread, > > > > > it > > > > > > > > would > > > > > > > > > > be > > > > > > > > > > > a > > > > > > > > > > > > > good > > > > > > > > > > > > > > > > time to deprecate the SinkFunction to avoid > the > > > > need > > > > > to > > > > > > > > > > introduce > > > > > > > > > > > > new > > > > > > > > > > > > > > > > functions towards (to be) deprecated APIs. > Jing > > > > > > > rightfully > > > > > > > > > > > > mentioned > > > > > > > > > > > > > > that > > > > > > > > > > > > > > > > it would be confusing to deprecate the > SinkFunction > > > > > if > > > > > > > its > > > > > > > > > > > > successor > > > > > > > > > > > > > is > > > > > > > > > > > > > > > not > > > > > > > > > > > > > > > > yet marked as @Public (it's currently > > > > > @PublicEvolving). > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > My proposal would be to promote the SinkV2 > API to > > > > > > @public > > > > > > > > in > > > > > > > > > > > Flink > > > > > > > > > > > > > 1.17 > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > mark the SinkFunction as @deprecated in > Flink 1.17 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The original Sink interface was introduced > in Flink > > > > > > 1.12 > > > > > > > > with > > > > > > > > > > > > > FLIP-143 > > > > > > > > > > > > > > > [2] > > > > > > > > > > > > > > > > and extended with FLIP-177 in Flink 1.14 [3] > and > > > > has > > > > > > been > > > > > > > > > > > improved > > > > > > > > > > > > on > > > > > > > > > > > > > > > > further as Sink V2 via FLIP-191 in Flink > 1.15 [4]. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Looking at the API stability graduation > process > > > > [5], > > > > > > the > > > > > > > > fact > > > > > > > > > > > that > > > > > > > > > > > > > Sink > > > > > > > > > > > > > > > V2 > > > > > > > > > > > > > > > > was introduced in Flink 1.15 would mean that > we > > > > could > > > > > > > > > warrant a > > > > > > > > > > > > > > promotion > > > > > > > > > > > > > > > > to @public already (given that there have > been two > > > > > > > releases > > > > > > > > > > with > > > > > > > > > > > > 1.15 > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > 1.16 where it was introduced). Combined with > the > > > > fact > > > > > > > that > > > > > > > > > > SinkV2 > > > > > > > > > > > > has > > > > > > > > > > > > > > > been > > > > > > > > > > > > > > > > the result of iteration over the > introduction of > > > > the > > > > > > > > original > > > > > > > > > > > Sink > > > > > > > > > > > > > API > > > > > > > > > > > > > > > > since Flink 1.12, I would argue that the > promotion > > > > is > > > > > > > > > overdue. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > If we promote the Sink API to @public, I > think we > > > > > > should > > > > > > > > also > > > > > > > > > > > > > > immediately > > > > > > > > > > > > > > > > mark the SinkFunction as @deprecated. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Looking forward to your thoughts. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Martijn > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > https://lists.apache.org/thread/l05m6cf8fwkkbpnjtzbg9l2lo40oxzd1 > > > > > > > > > > > > > > > > [2] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-143%3A+Unified+Sink+API > > > > > > > > > > > > > > > > [3] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-177%3A+Extend+Sink+API > > > > > > > > > > > > > > > > [4] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-191%3A+Extend+unified+Sink+interface+to+support+small+file+compaction > > > > > > > > > > > > > > > > [5] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-197%3A+API+stability+graduation+process > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > https://twitter.com/snntrable > > > > > > > > > > > > > > https://github.com/knaufk > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > https://twitter.com/snntrable > > > > > > > > > > https://github.com/knaufk > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >