@Test
public void transactionalOffsetCommit() throws Exception {
String destTopic = "topic2";
createNewTopic(destTopic, partitions);
int count = 10;
kafkaSender.createOutbound().send(createProducerRecords(0, count, true)).then().block(Duration.ofSeconds(receiveTimeoutMillis));
String sourceConsumerGroupId = "source_consumer";
receiverOptions = receiverOptions.consumerProperty(ConsumerConfig.ISOLATION_LEVEL_CONFIG, "read_committed")
.consumerProperty(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false")
.consumerProperty(ConsumerConfig.GROUP_ID_CONFIG, sourceConsumerGroupId);
KafkaSender<Integer, String> txSender = createTransactionalSender();
KafkaReceiver<Integer, String> receiver = createReceiver();
receiveAndSendTransactions(receiver, txSender, destTopic, count, 4)
.onErrorResume(e -> txSender.transactionManager().abort().thenMany(receiveAndSendTransactions(receiver, txSender, destTopic, count - 2, -1)))
.blockLast(Duration.ofMillis(receiveTimeoutMillis));
receiverOptions = receiverOptions
.consumerProperty(ConsumerConfig.GROUP_ID_CONFIG, "dest-consumer")
.subscription(Collections.singletonList(destTopic))
.clearAssignListeners()
.addAssignListener(partitions -> assignSemaphore.release());
CountDownLatch latch = new CountDownLatch(count);
subscribe(createReceiver().receive(), latch);
waitForMessages(latch);
checkConsumedMessages(0, count);
}