You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

This document outlines common rules for connectors that are developed & released separately from Flink (otherwise known as "externalized").

Versioning

Source releases:

<major>.<minor>.<patch>

Jar artifacts:

<major>.<minor>.<patch>-<flink-major>.<flink-minor>

For example, 1.0.0-1.15

This may imply releasing the exact same connector jar multiple times under different versions.

Branch model

The default branch is called main and is used for the next major iteration.

Remaining branches are called v<major>.<minor>, for example v3.2.

Branches are not specific to a Flink version, i.e., no v3.2-1.15 .

Flink compatibility

The Flink versions supported by the project (at the time of writing the last 2 minor Flink versions) must be supported.

How this is achieved is left to the connector, as long as it conforms to the rest of the proposal.


Since branches may not be specific to a particular Flink version this may require the creation of dedicated modules for each supported Flink version.

The architecture of such modules is up to the connector.

For example, there could be:

  • a base connector with version-specific extension modules ("shims") that inject the version-specific behavior
  • a common utility module that is used by version-specific connector modules.

Support

The last 2 major connector releases are supported with only the latter receiving additional features, with the following exceptions:

  • If the older major connector version does not support any currently supported Flink version, then it is no longer supported.
  • If the last 2 major versions do not cover all supported Flink versions, then the latest connector version that supports the older Flink version /additionally /gets patch support.

For a given major connector version only the latest minor version is supported.

This means if 1.1.x is released there will be no more 1.0.x release

Examples

ChangeInitial stateFinal state

New minor Connector version

Connector versionSupported Flink versionSupport
v1.01.14-1.15patch
v2.01.14-1.15feature
Connector versionSupported Flink versionSupport
v1.01.14-1.15none
v1.11.14-1.15patch
v2.01.14-1.15feature

New major Connector version

Connector versionSupported Flink versionSupport
v1.01.14-1.15patch
v2.01.14-1.15feature
Connector versionSupported Flink versionSupport
v1.01.14-1.15none
v2.01.14-1.15patch
v3.01.14-1.15feature

New major Connector version

The last 2 major version versions do not cover all supported Flink versions.

Connector versionSupported Flink versionSupport
v1.01.14patch
v2.01.15feature
Connector versionSupported Flink versionSupport
v1.01.14patch
v2.01.15patch
v3.01.15feature

New minor Flink version

An older connector to not support any supported Flink version.

-

Connector versionSupported Flink versionSupport
v1.01.14patch
v2.01.15feature
Connector versionSupported Flink versionSupport
v1.01.14none
v2.01.15-1.16feature

Externalization guide

https://github.com/apache/flink-connector-elasticsearch/ is the most complete example of an externalized connector.

Parent pom

We have a parent pom that connectors should use.

	<parent>
		<!-- This will be migrated to org.apache.flink at a later time. -->
		<groupId>io.github.zentol.flink</groupId>
		<artifactId>flink-connector-parent</artifactId>
		<version>1.0</version>
	</parent>

It handles various things; from setting up essential modules (like the compiler plugin), to QA (including license checks!), testing and Java 11/17 support.

(Almost) everything is opt-in, requiring the project to put a plugin into the <build>  section.

See the bottom of the <properties>  for properties that sub-projects should define.

Release utilities

We have a collection of release scripts that connectors should use.

https://github.com/zentol/flink-connector-shared-utils/tree/release_utils

See the contained README.md for details.

(This is currently in a beta state; it will be merged to apache/flink-connector-shared-utils once the first Elasticsearch connector release is complete.)

  • No labels