With the classical argument against XA being performance, most of you will probably find this post strange.
However, we've been able to do this - by exploiting some technical capabilities of XA and distributed transactions!
That's right: with XA we can delay the commit until after a batch of messages is processed (and also after the corresponding database updates were done). This means that we reduce the number of synced I/O writes (at commit time) to a fraction of what would otherwise be needed. This can make a big difference in performance.
Best of all, our batching is smart so it can dynamically adjust if there are errors in the batch. Oh, and did we mention it guarantees exactly-once processing?
Summary
- we enable exactly-once processing
- at high speed
