-
Sub-task
-
Resolution: Done
-
Major
-
None
-
False
-
-
False
-
-
Context
In traditional Debezium setups, developers must manually add two dependencies:
- debezium-engine — the core library that powers the embedded change data capture (CDC) runtime.
- 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