Or you could just give "direct" access to (a DB role that only has been granted SELECT on) a single schema within your database, entirely consisting of views. Then you've got a stable data-access API that you can iterate your data model behind, with nothing more than your DB itself.
(And you don't need to put much thought into setting it up, if you don't want to; your stable schema-API-layer can just start off as a bunch of views with 1:1 relationships to your real tables, which each just "SELECT * FROM their_underlying_table".)
I can say that we've had our troubles with kafka sure. But app teams 100% love working with it instead of having to have familiarity with all the various data sources we have.
Working with all sorts of different data but all of its kafka is much easier than all sorts of data from Many data sources.
I'm seeing too many places using it in some form of RPC style system as part of some "workflow" orchestration magic system with unicorns and ponies for everyone
Cdc also enables all sorts of non obvious changes that are infra focused. It's much easier to update your version of sql server, db2, mongo, etc. If you don't have to worry about every other app and how it connects to your shared service.
You may think that you're being smooth by updating a A record or Cname when doing a migration but very often there's an app out there accessing using an ip.
CDC -> Change Data Capture
The alternative is modifying your app for arbitrary data access and dealing with auth or giving direct data access.
Giving direct access to your database is fast but leads to very strong data coupling.
Exposing the data through the app layer is slower than cdc kafka integration but comes with a long term commitment to support that access. I have seen these type of data access queries easily hit performance edge cases.
There are other pros and cons but those are the ones that end up being the most troubling.
Often a single apps data can be incredibly valuable and many teams want to access it. So coming up with patterns that
1. Protect the app 2. Protect the data store 3. Decrease the maintenance cost of the app 4. Decrease maintenance cost of the datatype 5. Add sight complexities from kafka.
Can be very valuable.