Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-8902 Debezium Engine Quarkus Extension
  3. DBZ-8957

Debezium Engine Quarkus Extension: Use Quarkus-style Configuration Properties

XMLWordPrintable

      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

              gpanice@redhat.com Giovanni Panice
              rh-ee-gpanice Giovanni Panice (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: