Status

Current state: Adopted

Discussion threadmsg81955 

Voting thread: msg82225

JIRA: KAFKA-3073 

PRkafka#4151 

Released: 1.1.0

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Gwen Shapira describe the motivation well in the JIRA:

KafkaConsumer supports both a list of topics or a pattern when subscribing.
KafkaConnect only supports a list of topics, which is not just more of a hassle to configure - it also requires more maintenance.

We should provide a configuration option for Connect sinks to specify a regular expression instead of an explicit topic list.

Public Interfaces

This KIP introduces a new 'topics.regex' configuration option for Kafka Connect sinks that expects a string compatible with Java's regex Pattern class. Users may specify only one of 'topics' or 'topics.regex'.

Proposed Changes

If 'topics.regex' is specified, its string value will be used to instantiate a regex Pattern which will be passed to subscribe instead of a list of strings.

If both 'topics.regex' and 'topics' are specified, a ConfigException will be thrown to prevent startup.

Compatibility, Deprecation, and Migration Plan

'topics.regex' will default to the empty string "" so that existing configurations will not be affected by the additional option.

Rejected Alternatives

There is some concern that this solution leans on the Java-specific regular expression syntax. We could choose instead to support a less language-specific regular expression specification such as PCRE or re2.

Kafka Connect, however, already relies on Java-specific Patterns in configurations such as the RegexRouter transform, so the proposal in this KIP stays consistent with that.

Taking on evaluation of a new regular expression specification would significantly enlarge the scope of this change and seems more appropriate for a separate effort that would add that support consistently across Kafka Connect configurations.

Additional regular expression specifications could be accommodated in the future by adding an additional configuration option 'topics.regex.type'.

  • No labels