MirrorMaker 2 오프셋 변환 — 페일오버 후 '어디서부터 다시 읽을지'를 알아낸다
Kafka Streams Grace Period 및 MirrorMaker 2 Offset Translation 공식 문서·기술 블로그 종합 (웹 리서치, 2026) — Apache Kafka 공식 Javadoc(TimeWindows), KIP-382(MirrorMaker 2.0), Kafka 공식문서 MirrorMaker KIP-382: MirrorMaker 2.0
이 모듈을 다 읽으면
- Checkpoint Connector가 왜 필요한지, 왜 오프셋을 그대로 복사할 수 없는지 설명할 수 있다
- translateOffsets()가 양방향으로 동작해 페일오버·페일백 로직이 대칭적일 수 있는 이유를 설명할 수 있다
kafka-learn-16에서 다룬 DR 페일오버(시작 오프셋 결정이 핵심 난제였다)와 kafka-learn-17의 MirrorMaker 동작 원리를 전제로, MirrorMaker 2가 이 '시작 오프셋 결정' 문제를 구체적으로 어떻게 자동화하는지를 정리한다.
왜 오프셋을 그대로 못 쓰는가 — 원본과 미러 토픽의 오프셋은 다르다
소스 클러스터의 토픽과 그걸 미러링한 대상 클러스터의 토픽은 오프셋 체계가 서로 다르다 — 같은 메시지라도 소스에서의 오프셋 번호와 미러 쪽에서의 오프셋 번호가 다를 수 있다. 그래서 컨슈머가 소스 클러스터에서 읽던 것을 페일오버로 미러 클러스터로 옮겨가려면, '소스의 오프셋 X는 미러 쪽의 오프셋 몇 번에 해당하는가'를 알아내는 변환이 필요하다 — kafka-learn-16에서 다룬 '페일오버 시 시작 오프셋을 어떻게 정할 것인가'라는 문제의 구체적인 실체가 바로 이것이다.
핵심 포인트
- 소스 토픽과 미러 토픽은 오프셋 번호 체계가 서로 다름 — 같은 메시지라도 오프셋 값이 다를 수 있음
- 페일오버 시 '소스의 오프셋 X가 미러 쪽 몇 번에 해당하는가'를 변환해야 함 — kafka-learn-16의 시작 오프셋 결정 문제의 구체적 실체
Checkpoint Connector — 컨슈머 그룹 오프셋 변환을 전담한다
MirrorMaker 2는 세 가지 커넥터로 구성된다 — 데이터 자체를 복제하는 Source Connector, MirrorMaker 2 인스턴스의 헬스체크용 Heartbeat Connector, 그리고 컨슈머 그룹 오프셋 변환을 전담하는 Checkpoint Connector다. Checkpoint 토픽에는 각 컨슈머 그룹의 소스 쪽 오프셋과 미러 쪽(다운스트림) 오프셋이 함께 기록되는데, 다운스트림 오프셋은 오프셋-동기화 스트림을 기반으로 계산된다. RemoteClusterUtils 자체는 변환을 직접 하지 않고, Checkpoint Connector가 이미 해놓은 변환 결과를 조회하는 창구 역할만 한다.
핵심 포인트
- MirrorMaker 2의 세 커넥터: Source(데이터 복제)/Heartbeat(헬스체크)/Checkpoint(컨슈머 그룹 오프셋 변환 전담)
- Checkpoint 토픽에 소스 오프셋+다운스트림(미러) 오프셋을 함께 기록 — RemoteClusterUtils는 이 변환을 직접 안 하고 조회만 대신함
양방향 변환 — 페일오버와 페일백이 대칭적으로 동작한다
translateOffsets()는 소스→미러 방향뿐 아니라 미러→소스 방향으로도 동작한다 — 즉 페일오버(소스가 죽어 미러로 전환)든 페일백(복구된 소스로 다시 전환)이든 같은 메커니즘으로 오프셋을 변환할 수 있다는 뜻이다. 이 덕분에 컨슈머가 어느 방향으로 전환하든 '전환 전에 처리하던 지점부터 정확히 이어서' 재개할 수 있는 대칭적인 로직을 짤 수 있다. 실무에서는 이 변환을 수동으로 매번 호출하는 대신, 소스에서 대상으로 컨슈머 오프셋을 주기적으로 동기화하는 백그라운드 작업을 둬서, 전환이 실제로 필요한 순간엔 이미 최신 오프셋이 준비돼 있게 만드는 방식도 쓰인다.
핵심 포인트
- translateOffsets()는 소스→미러, 미러→소스 양방향 모두 동작 — 페일오버와 페일백에 같은 메커니즘 적용 가능(대칭적 로직)
- 실무에서는 주기적 백그라운드 동기화로 미리 오프셋을 맞춰둬, 실제 전환 순간엔 최신 오프셋이 준비돼 있게 하는 방식도 사용