---
title: "Kafka observer lag in Confluent Multi-Region Clusters"
description: "Five writes commit through the DC-A sync ISR while the Confluent MRC observer in DC-B falls to lag 5, then drains to 0 without slowing the Kafka producer."
url: https://monedula.dev/kafka-simulator/scenarios/observer-lag/
---

# Kafka observer lag in Confluent Multi-Region Clusters

Scenario 10.1.2 · Observer lag and async replication. Disaster recovery · Advanced · about 3 min · Apache Kafka 4.3 · Confluent Platform feature.

Confluent MRC: the sync ISR in DC-A commits a steady write stream (HW races ahead) while the DC-B observer replicates ASYNCHRONOUSLY and trails. Watch the observer lag - high-watermark minus the observer LEO - build under load and then drain once the burst ends, all without the observer ever counting toward the ISR or acks=all.

Run it: https://monedula.dev/kafka-simulator/playground/?scenario=10.1.2

## What you start with

This scenario tracks observer lag - the committed high-watermark minus the observer's log-end offset - on a Confluent MRC cluster. A steady write stream commits through the DC-A sync ISR while the DC-B observer replicates asynchronously, so it falls behind under load and then catches back up once the burst ends.

## Step by step

1. **MRC ready - 2 sync replicas in DC-A (min.ISR 2), one async observer in DC-B** (t+0.000s): orders has two synchronous replicas in DC-A and one async observer in DC-B. The observer fetches lazily and never counts toward the ISR or acks=all. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=10.1.2&t=0)
2. **Burst committed in DC-A (HW 5) - observer still at 0 (lag 5)** (t+1.100s): The DC-A sync ISR committed O1-O5 the moment each arrived, so the high-watermark is already 5. The observer's async fetches (observerLagMs 1000) have not landed yet - observer LEO 0, lag = HW − observer LEO = 5. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=10.1.2&t=1)
3. **Observer draining asynchronously - lag shrinking (HW 5, observer LEO 2)** (t+1.750s): The observer is catching up one delayed fetch at a time: it has reached offset 2 while the HW stays 5, so the lag has fallen from 5 to 3. The observer is still outside the ISR. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=10.1.2&t=2)
4. **Observer caught up - async lag back to 0; never entered the ISR** (t+2.100s): All five committed offsets have now reached the DC-B observer; observer LEO 5 equals the HW, so the lag is 0 again. The observer carried a full copy without ever being part of the synchronous quorum. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=10.1.2&t=3)

## The takeaway

An observer's lag is normal and self-correcting: because it never counts toward the ISR or acks=all, it absorbs load spikes by trailing and draining rather than ever slowing producers down.

## Configs in this scenario

- [`acks`](https://kafka.apache.org/43/configuration/producer-configs/#producerconfigs_acks): How many replicas must have a write before the producer counts it as sent: 0 (none), 1 (the leader only) or all (every in-sync replica, the default, and required for idempotence). [How acks works](https://monedula.dev/kafka-simulator/configs/acks/)

## Further reading

- [Confluent documentation](https://docs.confluent.io/platform/current/multi-dc-deployments/multi-region-async/index.html)
