I wonder if Kafka represents an existential angst in these Kubernetized Microservice times. Or is it more simply I am just too dumb to learn and use this shit correctly.
I mean, whoever in their right mind would want to:
- have a snapshot of data
- query data, including ad-hoc querying
- query related data
- have trasactional updates to data
When all you need is an unbounded stream of data that you need to traverse in order to do all these things.
Being able to see a snapshot is good, and I would hope to see a higher-level abstraction that can offer that on top of something Kafka-like. But making the current state the primary thing is a huge step backwards, especially when you don't get a history at all by default.
> - query data, including ad-hoc querying
OK, fair, ad-hoc queries are one thing that relational databases are legitimately good at. Something that can maintain secondary indicies and do query planning based on them is definitely useful. But you're asking for trouble if you use them in your live dataflow or allow ad-hoc queries to write to your datastore.
> - have trasactional updates to data
I do think this one is genuinely a mistake. What do you do when a transaction fails? All of the answers I've heard imply that you didn't actually need transactions in the first place.
Yeah, who could need to know exactly how many items of a particular product they have in stock currently, or how much money a customer has in her account at the particular moment she wants to do a withdrawal? It's really hard to come up with any useful real world examples when this could be the case.
> What do you do when a transaction fails?
It depends on why the transaction fails and in which way. But sometimes it is really useful to make sure that when one account is debited, another one is credited at the same time.
Having access to the current state of the world is useful, having a log of what happened / how it got that way is essential. You've got to get the foundations right before you build a monumental edifice on top.