In a distributed data store, you can get only 2 out of 3 guarantees:
API composer invokes multiple services and performs in-memory joins for the final query
(A long series of incidents happened over a period of time)
Data consistency across multiple services without using distributed transactions
Programming model is more complex that requires properly designed compensating transactions that explicitly undo changes made earlier in a saga.
Designed specially for outbox pattern, provides abstraction libraries along with CDC Service.
Not so flexible, and customizable configuration
Not everything is well documented
Relatively new, no major version released
Flexibility over columns and tables nomenclature
Well documented configuration, stable and reliable.
No client integration libraries for abstraction, available for Quarkus framework only.
This is important for maintaining correct order in Kafka partitions.