Kezhu Wang created FLINK-14793:
----------------------------------
Summary: Add SPI interface to discovery state backend and establish well-known names
Key: FLINK-14793
URL:
https://issues.apache.org/jira/browse/FLINK-14793 Project: Flink
Issue Type: New Feature
Components: Runtime / State Backends
Reporter: Kezhu Wang
Currently, {{StateBackendLoader.loadStateBackendFromConfig}} uses hybrid of hardcoded state backend name and class path to construct {{StateBackendFactory}}.
I think we can provide a SPI interface, say \{{StateBackendProvider}}, to accomplish this.
{code:title=StateBackendProvider.java}
/**
* SPI interface for {@link StateBackend} discovery and naming.
*
* @param <T> StateBackend
*/
@PublicEvolving
public interface StateBackendProvider<T extends StateBackend> extends StateBackendFactory<T> {
/**
* Name of provided {@link StateBackend}.
*
* @return name of provided {@link StateBackend}
*/
@Nonnull
String name();
/**
* Aliases for provided {@link StateBackend}. Implementations can use this for deprecated names.
*
* @return aliases for provided {@link StateBackend}
*/
default Set<String> aliases() {
return Collections.emptySet();
}
}
{code}
With above spi, we gain several benefits over current hardcode and class path approach:
* Explicit and established state backend naming and discovery instead of hardcoded. We can know exactly which state backends are avaiable and whether they are provided by user jars or not.
* In state backend configuration, we can simply use established state backend name while not tied to fragile class path which is easily refactored out without great caution. These established state backend names could be flink community level, such as `jobmanager`, `filesystem` and `rocksdb`, and corporation level, such as `corporation-a.product.state-backend-basename`. Together with FLINK-14790, we can switch among state backends without knowledge of concrete implementation of target state backends in source code level.
* More compatible with java module shipped in java 9 and above.
Discovery of state backend can be restricted in {{StateBackendLoader}}, and we can fallback to class path approach if no matching state backend found in discovered state backends.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)