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

Create Maven Modules for Debezium Engine Quarkus Extension

XMLWordPrintable

      Context

      In traditional Debezium setups, developers must manually add two dependencies:

      1. debezium-engine — the core library that powers the embedded change data capture (CDC) runtime.
      1. A specific connector, e.g., debezium-connector-postgres — the actual plugin that knows how to talk to the underlying database.

      This model works well for flexible setups but introduces friction when adapting to Quarkus:

      • Manual configuration burden: The developer must remember to configure the connector explicitly (via connector.class=...) and make sure the correct version is used.
      • Quarkus-native limitations: Quarkus aims for fast startup and native image compatibility via GraalVM. Having loose, runtime-loaded connectors with complex reflection/configuration mechanisms makes this fragile or incompatible with native compilation.

      Decision

      We will provide a single Quarkus artifact that bundles both the engine and a specific connector in one dependency.

      For example:

      <dependency>
          <groupId>io.debezium</groupId>
          <artifactId>debezium-quarkus-postgres</artifactId>
          <version>${version.debezium}</version>
      </dependency>
      

      This will include:

      • The Debezium embedded engine
      • The selected connector (e.g., MySQL)
      • Sensible Quarkus-based defaults to eliminate boilerplate

      This will hide the connector class setup (e.g., connector.class=...) from the user — it will be automatically handled internally by the extension.

      Consequences

      • We’ll need to release one Quarkus extension per connector, e.g.:
        • debezium-quarkus-mysql
        • debezium-quarkus-postgres
        • debezium-quarkus-sqlserver
        • ...

      (This is similar to how Quarkus handles reactive clients or Kafka.)

      • Connector class becomes "hidden" from the user — which is good for simplicity but may limit extreme customizations unless we expose extension points.
      • Maintenance overhead is slightly higher due to more modules, but this is offset by clarity and native compatibility.
      • maybe it's necessary in future to create a common module to wrap all the feature available

      References

      Debezium Design Document: https://github.com/debezium/debezium-design-documents/pull/16

              rh-ee-gpanice Giovanni Panice (Inactive)
              rh-ee-gpanice Giovanni Panice (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: