독서

[카프카 핵심 가이드] Ch 09, Ch 10

오렌지색 귤 2025. 8. 24. 20:53
반응형

1. Kafka Connect는 Spring Kafka로 직접 구현한 Consumer보다 뭐가 더 좋은가?

그냥 JDBC로 읽고 KafkaTemplate으로 전송하면 되는데, Kafka Connect를 왜 써야 하지?

 

 

Kafka Connect의 핵심은 운영 편의성과 Pluggability이다.

 

직접 구현한 Producer/Consumer는:

  • 장애 발생 시 재처리 로직, offset 저장, 실패 전파, 재시작 등 모든 책임이 애플리케이션에 있음
  • 운영자는 해당 서비스를 배포하고, 장애 시 디버깅과 로깅을 파고들어야 함

 

반면, Kafka Connect는 다음과 같은 특성을 가진다:

항목 Kafka Connect 직접 구현
offset 저장 Kafka 내부 토픽 (__consumer_offsets) 보통 DB or Kafka 자체에 수동 커밋
리스타트/장애 복구 Worker 재시작으로 자동 복구 어플리케이션 재기동 or 별도 로직 필요
구성 변경 REST API로 Connector 설정 변경 코드 수정 + 배포
재사용성 JDBC, Debezium, S3 등 이미 만들어진 connecter 수백 개 직접 개발해야 함

 

 

 

 

2. Kafka Connect 쓰면 장애났을 때 어떻게 재처리하는가?

Connector가 중간에 죽으면 실패한 레코드는 어떻게 되나?

 

 

Kafka Connect는 기본적으로 레코드 단위의 at-least-once 처리를 보장한다.

그리고 각 Connector는 자체적으로 offset을 커밋하고, 실패하면 재시도 -> 실패 -> DLQ 흐름을 따른다.

 

 

Kafka Connect에서 errors.deadletterqueue.topic.name 옵션을 설정하면, 실패한 레코드를 Kafka 토픽으로 보내고, 수동으로 확인 및 재처리할 수 있다.

 

 

 

 

3. MirrorMaker 2.0이면 클러스터 간 동기화는 완벽하게 되는건가?

그럼 A 클러스터 -> B 클러스터로 완전하게 미러링되고 offsest도 동기화되나?

 

 

거의 대부분의 메시지는 미러링되지만, 다음과 같은 caveat가 있다:

이슈 설명
Offset translation MM2는 offset을 따로 저장해서 원본 offset과 일치하지 않음.
Consumer가 A의 offset으로 정확히 복원되지 않음.
Loop 방지 필요 양방향 미러링할 경우 A->B->A로 메시지가 순환될 수 있음.
Topic 필터링 필요
Config/ACL은 기본 미러링 안 됨 topic metadata, schema, ACL 등은 직접 동기화해야 함

 

 

 

 

 

4. 요즘은 MirrorMaker 대신 뭘 써?

Confluent에서는 Cluster Linking도 있고, Kafka 자체에도 diskless 나온다는데?

 

 

Cluster Linking (Confluent 전용)은 MM2보다 훨씬 강력한 미러링 기능을 제공한다:

  • offset 유지, 동일한 topic name 유지, 정확한 시간 기반 리플레이
  • config / ACL / topic structure까지 복제
  • 단점은 Confluent Enterprise 라이선스 필요

Kafka 4.x의 diskless + tiered storage 구조와 맞물리면:

  • 로그를 직접 복제하지 않고
  • remote storage를 공유하거나, CDC 수준의 동기화로 분리

이런 구조에서 MM2보다 전사적인 운영 비용이 훨씬 낮아질 수 있다.

 

 

 

 

5. Kafka를 log 시스템으로 쓸 때 Connect랑 Mirror는 진짜 필요할까?

그냥 Filebeat -> Kafka -> ClickHouse 이런 구조면 되지 않나?

 

 

당장은 필요 없을 수도 있다.

하지만 다음과 같은 요구가 생기면 Kafka Connect/Mirror를 고려하게 된다:

  • Kafka로 적재된 로그를 정기적으로 S3로 내리고 싶다 -> Connect Sink + HDFS/S3 connector
  • 로그 분석용으로 Region B 클러스터로도 동일하게 가져가야 한다 -> MirrorMaker or Cluster Linking
  • Kafka 내부 파티션 재정렬 없이 다른 클러스터에서 복제하고 싶다 -> MM2 with offset.sync.enabled
반응형