-
Sub-task
-
Resolution: Done
-
Major
-
None
-
False
-
-
False
-
-
Context
In traditional Debezium usage (especially outside Quarkus), configuration is based on plain key-value properties, very similar to Apache Kafka Connect. A typical configuration looks like this:
connector.class=io.debezium.connector.mysql.MySqlConnector database.hostname=localhost database.port=3306 database.user=root database.password=secret
Quarkus allows users to configure features declaratively using application.properties or application.yaml, with clear prefixes like:
quarkus.datasource.db-kind=postgresql quarkus.kafka.bootstrap-servers=localhost:9092
This namespacing and structure is the standard way Quarkus users expect to configure anything — from HTTP servers to databases to Kafka consumers.
Decision
We will expose all Debezium engine configuration properties under the quarkus.debezium. prefix.
quarkus.debezium.configuration.offset.storage=org.apache.kafka.connect.storage.MemoryOffsetBackingStore quarkus.debezium.configuration.database.hostname=localhost quarkus.debezium.configuration.database.port=5432 quarkus.debezium.configuration.database.user=postgres quarkus.debezium.configuration.database.password=secret quarkus.debezium.configuration.snapshot.mode=never
Furthermore we want the possibility to use the configuration taken from Quarkus default datasource https://quarkus.io/guides/datasource. In case there is no override made with Debezium configuration, it's possible to use the Quarkus default datasource configuration.
Consequences
- We need to mirror the existing Debezium config keys under quarkus.debezium.configuration.*. This likely involves some mapping logic or proxying config objects to Debezium's internal structures.
- Since Quarkus favors code over configuration, we may later decide to expose high-value behaviors (e.g., snapshot mode, heartbeat tuning) via annotated configuration classes instead of raw strings.
- Users familiar with Kafka Connect-style Debezium configs may need to adjust to the new namespacing and style — though this is expected to be a low barrier.
- Advanced use cases may still require escape hatches, like passing raw properties via a Map<String, String> — we should evaluate if and how to allow this.
References
Debezium Design Document: https://github.com/debezium/debezium-design-documents/pull/16