Hi all,

It seems that we are on the same page that having flink-connector-aws use
non-public API from apache/flink is not a blocking issue here. And I agree
that it would be nice to make necessary APIs public so that 1) projects
outside Flink can also develop similar connectors and 2)
flink-connector-aws can likely have less issues dealing with changes in
apache/flink.

I just want to note that, if we want to additionally mark a few classes in
flink-avro as @PublicEvolving, since this is a major public API change, it
is probably necessary to create a FLIP to specify these API changes. Also,
we might need to open a new voting thread since the votes made earlier in
this thread do not cover those public API change.

Thanks,
Dong


On Tue, Jan 31, 2023 at 4:02 PM Danny Cranmer <dannycran...@apache.org>
wrote:

> Hello all,
>
> @Dong Lin while I agree with your reasoning here, our ultimate aim is to
> have stable public APIs. If we need to use @Internal apis for the Apache
> connectors/formats/etc, then it is likely that users building custom
> integrations do too. Therefore I am aligned with @Chesnay that we should
> not depend on @Internal classes. But the same issue applies in the main
> Flink codebase and externalizing code does not necessarily need to be a
> blocker, since it is an existing problem. We can consider this a best
> practice.
>
> > It seems that there are roughly 32 public classes in flink-avro that are
> not marked with @PublicEvolving. Some of them are explicitly marked
> as @Internal. Are you suggesting to mark all these classes as
> @PublicEvolving?
>
> I interpreted @Teoh, Hong <lian...@amazon.co.uk>'s message as we have
> identified *three* classes that are currently used by the formats that are
> insufficiently scoped that we should promote to @PublicEvolving.
>
> Thanks for the deep dive @Teoh, Hong <lian...@amazon.co.uk>.
>
> > As such, I propose that we:
> - Mark the inherently public classes in flink-avro as @PublicEvolving
> - Proceed with externalizing flink-avro-glue-schema-registry
>
> +1 to this proposal
>
> Thanks,
> Danny
>
> On Tue, Jan 31, 2023 at 12:32 AM Dong Lin <lindon...@gmail.com> wrote:
>
> > Hi Hong,
> >
> > Thanks for the detailed reply.
> >
> > It seems that there are roughly 32 public classes in flink-avro that are
> > not marked with @PublicEvolving. Some of them are explicitly marked
> > as @Internal. Are you suggesting to mark all these classes as
> > @PublicEvolving?
> >
> > I agree it would be nice to mark more classes as @PublicEvolving so that
> > projects outside apache/flink* can take advantage of these APIs. On the
> > other hand, it is probably useful to make sure that we only expose the
> > minimal set of APIs for our target use cases and that all public APIs are
> > well-documented.
> >
> > Typically public APIs are exposed via interface rather than concrete
> class.
> > So it is not clear to me whether we can just mark all those classes
> > as @PublicEvolving and still achieve the high-level goal described above.
> > Maybe we should follow the typical FLIP process by listing all APIs that
> > need to be exposed as public in a FLIP so that other developers will help
> > double check those APIs and vote for it, if we decide to add more public
> > APIs in Flink.
> >
> > On the other hand, I still think it is OK for flink-connector-aws (or any
> > projects managed by Flink community) to use Internal APIs, for the
> reasons
> > described in my reply to Chesnay's email. We can still try to make more
> > APIs public. I just don't think it has to block the effort to
> > externalize AWS formats.
> >
> > What do you think?
> >
> > Regards,
> > Dong
> >
> >
> >
> > On Tue, Jan 31, 2023 at 2:18 AM Teoh, Hong <lian...@amazon.co.uk> wrote:
> >
> > > Hi @Chesnay @Dong Lin,
> > >
> > > Thanks for flagging up the concerns.
> > >
> > > I agree that we should make clear which APIs are public in flink-avro
> so
> > > that we can make the connector code more independent. IMO that moves in
> > the
> > > right direction for Flink in general!
> > >
> > >
> > > 1. Public classes/interfaces in flink-avro
> > > - I took a look at the classes in flink-avro that are used in
> > > flink-avro-glue-schema-registry, and it turns out those classes are
> > already
> > > exposed as part of the public interface in
> > flink-avro-glue-schema-registry
> > > and flink-avro-confluent-registry. (They are already inherently
> > > @PublicEvolving (RegistryAvroDeserializationSchema, SchemaCoder,
> > > RegistryAvroSerializationSchema), so I recommend that we should just
> mark
> > > them as so for clarity.
> > > - The only class that isn't inherently exposed as @PublicEvolving is
> > > MutableByteArrayInputStream, but I took a look, and I think we can
> remove
> > > this dependency from flink-avro-glue-schema-registry
> > > - Also, while looking, I found that there are a couple of classes that
> > are
> > > recommended for users in our doc [1] but are not marked as
> > @PublicEvolving
> > > . We can probably also fix this by adding the @PublicEvolving
> annotation
> > >
> > > 2. Our public API depends on Apache Avro classes
> > > - I agree, ideally we don't have this dependency, but since we already
> > > inherently expose it to users, we should maintain this for backwards
> > > compatibility.
> > > - Also, some of the @PublicEvolving classes in flink-avro already have
> > > dependencies on Avro classes [2]
> > >
> > > As such, I propose that we:
> > > - Mark the inherently public classes in flink-avro as @PublicEvolving
> > > - Proceed with externalizing flink-avro-glue-schema-registry
> > >
> > >
> > > Let me know what you think!
> > >
> > > Regards,
> > > Hong
> > >
> > > [1] AvroInputFormat
> > >
> >
> https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/formats/avro/
> > > [2] AvroFormatOptions
> > >
> >
> https://github.com/apache/flink/blob/f75cf38e28143bb36acbc2ee6a5ea9c8852916dd/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/AvroFormatOptions.java
> > >
> > >
> > > On 30/01/2023, 12:53, "Chesnay Schepler" <ches...@apache.org> wrote:
> > >
> > >     CAUTION: This email originated from outside of the organization. Do
> > > not click links or open attachments unless you can confirm the sender
> and
> > > know the content is safe.
> > >
> > >
> > >
> > >     On 30/01/2023 13:24, Dong Lin wrote:
> > >     > it should be OK for
> > >     > apache/flink-connector-aws to use non-public API, similar to how
> > > classes
> > >     > inside Flink can use APIs marked with @Internal.
> > >     >
> > >     > We can mark related classes with @Internal as appropriate,
> without
> > >     > requiring any new FLIP.
> > >
> > >     It's not though, because these APIs don't offer any compatibility
> > >     guarantees.
> > >
> > >     We want to arrive at a state where connectors are fully independent
> > of
> > >     Flink releases. Using non-public APIs runs counter to that.
> > >
> > >
> > >
> >
>

Reply via email to