...
Code Block | ||
---|---|---|
| ||
public interface ConfigProvider extends Configurable, Closeable { // Configure this class with the initialization parameters void configure(Map<String, ?> configs); // Look up the data at the given path. ConfigData get(String path); // Look up the data with the given keys at the given path. ConfigData get(String path, Set<String> keys); // The ConfigProvider is responsible for making this callback whenever the key changes. // Some ConfigProviders may want to have a background thread with a configurable update interval. void subscribe(String path, Set<String> keys, ConfigChangeCallback callback); // Inverse of subscribe void unsubscribe(String path, Set<String> key, ConfigChangeCallback callback); // Remove all subscriptions void unsubscribeAll(); // Close all subscriptions and clean up all resources void close(); } public class ConfigData { private longLong ttl; private Map<String, String> data; public ConfigData(Map<String, String> data, longLong ttl) { this.ttl = ttl; this.data = data; } public ConfigData(Map<String, String> data) { this(Long.MAX_VALUEnull, data); } public longLong ttl() { return ttl; } public Map<String, String> data() { return data; } } public interface ConfigChangeCallback { void onChange(String path, ConfigData data); } |
...
An implementation of ConfigProvider
called FileConfigProvider
will be provided that can use secrets from a Properties file. When using the FileConfigProvider
with the variable syntax ${file:path:key
}, the path
will be the path to the file and the key
will be the property key.
Implementations of ConfigProvider
, such as FileConfigProvider
, that are provided with Apache Kafka will be placed in the package org.apache.common.config.provider
. This will facilitate frameworks such as Connect that treat instances of ConfigProvider
as components that should be loaded in isolation. Connect will assume that all classes in the package org.apache.common.config.provider
are such components.
Two existing interfaces that are specific to Connect will be modified. This will allow for Tasks to get the latest versions of their configs with all indirect references reloaded.
...