I was looking into why I was getting control messages as normal messages and looks like there is no handling of control batches, meaning aborted transactions are not filtered out in read_committed isolation level.
Relevant references:
https://kafka.apache.org/documentation/#controlbatch
https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/internals/CompletedFetch.java#L203-L219