Thanks for the information, Martijin & Timo ! > Since implementing a connector is not straightforward, we were expecting that not many users implement custom connectors.
Currently, the apache iceberg & hudi are heavily depending on the PublicEvolving API for their flink connectors. I think apache hudi even uses more public API than iceberg to implement their relatively complicated flink sink DAG, I think Danny Chen [1] may want to provide more input. API compatibility has become one of the core reasons that downstream projects maintainers vote to support a release or not because bandwidth from the downstream projects are limited and we maintainers need to balance between the community requirements and cost. A great compatible flink release will greatly save the maintenance cost (especially we flink release often ) and we are also glad to make it a longer life cycle. > We therefore consider this part as a kind of "second level API" for which we can evolve quicker. That sounds great ! I'm glad to see that we are making the API more friendly ! [1]. https://github.com/danny0405 On Tue, Sep 28, 2021 at 3:52 PM Timo Walther <twal...@apache.org> wrote: > Hi Zheng, > > I'm very sorry for the inconvenience that we have caused with our API > changes. We are trying our best to avoid API breaking changes. Thanks > for giving us feedback. > > There has been a reason why Table API was marked as @PublicEvolving > instead of @Public. Over the last two years, we have basically rewritten > the entire API [1] to digest the Blink merge and making the Table API > stable and ready for the future. We tried our best to give users 1-2 > releases time to upgrade their implementations whenever we deprecated > API but we were aware that this might cause frustration, but hopefully > for the greater good. We have reworked type system, Catalog API, schema, > source/sinks, functions and much more. Flink 1.14 will hopefully be the > last release with major API changes. We could also mark most Table API > interfaces as `@Public` in 1.15. > > For your mentioned incompatibility, I agree that the change from > CatalogTable to ResolvedCatalogTable was not very nice. Since > implementing a connector is not straight forward, we were expecting that > not many users implement custom connectors. We therefore consider this > part as kind of "second level API" for which we can evolve quicker. A > `context.getCatalogTable().getSchema()` should still work for 1.12 and > 1.13, at least that was the goal. > > Thanks again for the feedback. It was a good reminder and we will pay > more attention to this. > > Regards, > Timo > > [1] > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-32%3A+Restructure+flink-table+for+future+contributions > > > On 28.09.21 08:40, Martijn Visser wrote: > > Hi Zheng, > > > > Thanks for reaching out and sharing your frustration. No feelings are > hurt > > and feedback is always welcome, because that's the only way we can > improve > > for the future. API compatibility is a really important thing for us > while > > also improving and building new capabilities. Let me investigate a bit > what > > happened on our end, share that and then try to get some learnings out of > > it for the future. I'll get back to you in a couple of days. > > > > Best regards, > > > > Martijn Visser | Product Manager > > > > mart...@ververica.com > > > > <https://www.ververica.com/> > > > > > > Follow us @VervericaData > > > > -- > > > > Join Flink Forward <https://flink-forward.org/> - The Apache Flink > > Conference > > > > Stream Processing | Event Driven | Real Time > > > > > > On Tue, 28 Sept 2021 at 07:39, OpenInx <open...@gmail.com> wrote: > > > >> Sorry about my unfriendly tone of the last e-mail, I got frustrated > about > >> the experience of maintaining the project which is closely with Flink. > My > >> intention was trying to remind everyone to be careful about API > >> compatibility and didn't really watch out for the tone I used. > >> > >> Hope that doesn't hurt anyone's feelings. > >> > >> On Tue, Sep 28, 2021 at 12:33 PM OpenInx <open...@gmail.com> wrote: > >> > >>> Hi Dev > >>> > >>> We are trying to upgrade the flink version from 1.12.0 to 1.13.2 in > >> apache > >>> iceberg project ( https://github.com/apache/iceberg/pull/3116), but > >> it's > >>> not a great experience. We expect to support both flink1.12 and > >> flink1.13 > >>> in an iceberg-flink module without using the new API of flink1.13 for > >>> saving maintenance cost, but we find the iceberg-flink-runtime.jar > built > >>> by flink 1.13 cannot works fine in flink 1.12 clusters because of the > >> basic > >>> API compatibility was break when iterating flink 1.12 to flink1.13.2: > >>> > >>> (The following are copied from the iceberg issue: > >>> https://github.com/apache/iceberg/issues/3187#issuecomment-928755046) > >>> > >>> Thanks for the report, @Reo-LEI ! I think this issue was introduced > from > >>> this apache flink PR ( > >>> > >> > https://github.com/apache/flink/pull/15316/files#diff-bd276ed951054125b39428ee61de103d9c7832246398f01514a574bb8e51757cR74 > >> ) > >>> and FLINK-21913 (https://issues.apache.org/jira/browse/FLINK-21913), > it > >>> just changed the returned data type from CatalogTable to > >>> ResolvedCatalogTable without any compatibility guarantee. In this case, > >> the > >>> iceberg-flink-runtime jar which is compiled from apache flink 1.13 will > >>> include the ResovledCatalogTable class inside it. Finally when we > package > >>> this jar and submit the flink job to flink 1.12, the above > compatibility > >>> issue happen. > >>> > >>> As we all know, the DynamicTableFactory ( > >>> > >> > https://github.com/apache/flink/blob/99c2a415e9eeefafacf70762b6f54070f7911ceb/flink-table/flink-table-common/src/main/java/org/apache/flink/table/factories/DynamicTableFactory.java > >> ) > >>> is a basic API which almost all flink connectors are built on top of > it. > >>> The breaking compatibility makes the downstream projects really hard to > >>> deliver better compatibility to users, unless we iceberg maintain > >> different > >>> modules for each maintained flink version (That's not the thing that we > >>> want to do). > >>> > >>> The last flink upgrading work is also not a good experience (See the > >>> discussion (https://github.com/apache/iceberg/pull/1956) and comment ( > >>> https://github.com/apache/iceberg/pull/1956#discussion_r546534299) ), > >>> because the flink 1.12 also breaks several API that was annotated > >>> PublicEvolving in flink 1.11.0, that becomes one of the most important > >>> reasons leading to the conclusion that stops support flink 1.11.0 in > our > >>> apache iceberg branch ( Supporting new features [such as flip-27 > unified > >>> iceberg source/sink] that depends the API introduced in flink 1.12 is > >>> another reason). To better support the compatibility of downstream > >> systems > >>> and delivering better experience to flink users, I will strongly > suggest > >>> the Apache Flink community to pay more attention to ensuring API > >>> compatibility. > >>> > >>> > >>> Zheng Hu (openinx) > >>> > >>> Thanks. > >>> > >> > > > >