How swathipalla123/cdc-synchronization-engine works
Purpose and Runtime Entry
This is a Java 21/Spring Boot CDC synchronization service. It captures PostgreSQL changes through Debezium/Kafka Connect, consumes Kafka topic events, and projects synchronization state into Elasticsearch, Redis, and PostgreSQL audit/status records. The application entry point is src/main/java/com/example/cdc/CdcSynchronizationEngineApplication.java; runtime wiring and deployment are defined by src/main/resources/application.properties, Dockerfile, and docker-compose.yml.
CDC Ingestion Boundary
Debezium is the source-database-to-event boundary: PostgreSQL changes are captured and emitted into Kafka topics such as orders, products, customers, and inventory. Connector integration is represented by src/main/java/com/example/cdc/config/DebeziumConfig.java and src/main/java/com/example/cdc/kafka/debezium/DebeziumConnector.java. Kafka Connect/Debezium runs externally rather than as ordinary request processing in the application.
Kafka Event Processing
Topic-specific consumers form the main asynchronous processing stage:
src/main/java/com/example/cdc/kafka/consumer/OrderConsumer.java,
src/main/java/com/example/cdc/kafka/consumer/ProductConsumer.java, and
src/main/java/com/example/cdc/kafka/consumer/CustomerConsumer.java.
They receive CDC messages with manual acknowledgement and delegate synchronization work to the service layer. src/main/java/com/example/cdc/kafka/producer/KafkaProducerService.java supports publishing, including the exposed Kafka test/trigger endpoint.
Synchronization and Projection
src/main/java/com/example/cdc/service/SyncService.java is the central orchestration boundary for applying consumed changes. It coordinates persistence of event/status state and downstream projections. src/main/java/com/example/cdc/service/ElasticsearchService.java writes searchable synchronized data, while src/main/java/com/example/cdc/service/RedisService.java provides cache integration. Their clients/configuration are isolated in src/main/java/com/example/cdc/config/ElasticsearchConfig.java and src/main/java/com/example/cdc/config/RedisConfig.java.
Reliability, Failure, and Audit Path
Failed processing flows through retry and DLQ handling: src/main/java/com/example/cdc/kafka/retry/ExponentialRetryHandler.java, src/main/java/com/example/cdc/service/RetryService.java, and src/main/java/com/example/cdc/kafka/dlq/DeadLetterConsumer.java. Failed events are persisted via src/main/java/com/example/cdc/entity/FailedEvent.java and exposed for operations. Successful and failed work is tracked through ProcessStatus, SyncEvent, and audit logs, with auditing centralized in src/main/java/com/example/cdc/service/AuditService.java.
API, Security, and Operational Access
The synchronous API is an operational/control plane, not the CDC data path. Authentication begins at src/main/java/com/example/cdc/controller/AuthController.java; JWT and role-based authorization are enforced by src/main/java/com/example/cdc/config/SecurityConfig.java and src/main/java/com/example/cdc/security/JwtFilter.java. Status and failure inspection are served by src/main/java/com/example/cdc/controller/SyncStatusController.java and src/main/java/com/example/cdc/controller/FailedEventController.java.
Observability and Infrastructure
A correlation ID is attached at the HTTP boundary in src/main/java/com/example/cdc/tracing/CorrelationIdFilter.java. Metrics/Prometheus are configured in src/main/java/com/example/cdc/config/MicrometerConfig.java and src/main/java/com/example/cdc/config/PrometheusConfig.java; Swagger config exposes API documentation. The composed environment includes PostgreSQL, Kafka/Zookeeper, Debezium, Redis, Elasticsearch/Kibana, and the Spring Boot application.
Components 21
CDC Ingestion
- Source PostgreSQL · Database whose changes are captured by CDC.
- Debezium / Kafka Connect · Externally captures PostgreSQL changes.
src/main/java/com/example/cdc/kafka/debezium/DebeziumConnector.java - Debezium config
src/main/java/com/example/cdc/config/DebeziumConfig.java - Kafka topics · Orders, products, customers, and inventory CDC topics.
Event Processing
- Topic consumers · Manually acknowledge order, product, and customer events.
src/main/java/com/example/cdc/kafka/consumer/OrderConsumer.java - Sync service · Applies CDC changes and coordinates state and projections.
src/main/java/com/example/cdc/service/SyncService.java - Elasticsearch service
src/main/java/com/example/cdc/service/ElasticsearchService.java - Redis service
src/main/java/com/example/cdc/service/RedisService.java
Reliability & Audit
- Exponential retry handler
src/main/java/com/example/cdc/kafka/retry/ExponentialRetryHandler.java - Retry service
src/main/java/com/example/cdc/service/RetryService.java - Dead-letter consumer
src/main/java/com/example/cdc/kafka/dlq/DeadLetterConsumer.java - Audit service · Records synchronization and processing outcomes.
src/main/java/com/example/cdc/service/AuditService.java - Audit/status PostgreSQL · Stores process status, sync events, and failed events.
src/main/java/com/example/cdc/entity/FailedEvent.java
Control Plane
- Operational API · Provides status, failed-event inspection, and control access.
src/main/java/com/example/cdc/controller/SyncStatusController.java - JWT security · Protects the operational API with JWT and roles.
src/main/java/com/example/cdc/config/SecurityConfig.java - Authentication endpoint
src/main/java/com/example/cdc/controller/AuthController.java - Kafka producer service · Supports test and trigger publishing.
src/main/java/com/example/cdc/kafka/producer/KafkaProducerService.java - Correlation and metrics · Adds HTTP correlation IDs and exports Prometheus metrics.
src/main/java/com/example/cdc/tracing/CorrelationIdFilter.java
Projection Stores
- Elasticsearch
src/main/java/com/example/cdc/config/ElasticsearchConfig.java - Redis
src/main/java/com/example/cdc/config/RedisConfig.java
Other components
- Spring Boot application
src/main/java/com/example/cdc/CdcSynchronizationEngineApplication.java
Connections 23
- Source PostgreSQL → Debezium / Kafka Connect: captures changes
- Debezium config → Debezium / Kafka Connect: configures
- Debezium / Kafka Connect → Kafka topics: publishes CDC events
- Kafka topics → Topic consumers: delivers topic events
- Topic consumers → Sync service: delegates changes
- Sync service → Elasticsearch service: projects searchable data
- Sync service → Redis service: updates cache
- Elasticsearch service → Elasticsearch: indexes
- Redis service → Redis: writes
- Sync service → Audit service: records outcome
- Audit service → Audit/status PostgreSQL: persists audit and status
- Topic consumers → Exponential retry handler: on processing failure
- Exponential retry handler → Retry service: coordinates retries
- Retry service → Kafka topics: requeues or sends to DLQ
- Kafka topics → Dead-letter consumer: delivers failed events
- Dead-letter consumer → Audit/status PostgreSQL: persists failed event
- Operational API → Audit/status PostgreSQL: inspects status and failures
- Authentication endpoint → JWT security: authenticates through
- JWT security → Operational API: authorizes
- Kafka producer service → Kafka topics: publishes triggers
- Correlation and metrics → Operational API: traces HTTP requests
- Spring Boot application → Topic consumers: hosts
- Spring Boot application → Operational API: hosts