콘텐츠로 이동
Study NoteKafka

8. 생태계

전부 처음부터 얹는 것이 아니다 — 같은 코드를 세 번째 쓰게 될 때가 각 도구의 도입 시점이다

이 장에서 처음 나오는 말5개
Kafka Connect
"DB → Kafka", "Kafka → S3" 같은 반복적 연동을 코드 없이 설정으로 돌리는 실행 프레임워크. 커넥터를 꽂아 쓴다.
Debezium
CDC(DB 변경 캡처) 커넥터의 사실상 표준. DB의 트랜잭션 로그를 읽어 변경분을 Kafka 토픽으로 흘린다.
스키마 레지스트리Schema Registry
토픽별 메시지 스키마를 등록·버전 관리하고 호환성 규칙을 강제하는 별도 서비스.
Kafka Streams
Kafka 토픽을 읽어 변환·집계해 다시 토픽에 쓰는 처리를 앱 안에서 하는 자바 라이브러리. 별도 클러스터가 없다.
MirrorMaker 2
클러스터에서 클러스터로 토픽을 복제하는 도구. 재해 복구 · 멀티 사이트용 — 이 덱에서는 이름만 잡아 둔다.
업무 DB의 CDC와 서비스 앱이 Kafka로 들어오고, Connect가 검색 인덱스·S3·DW로 내보내며, Streams와 스키마 레지스트리가 함께 붙는 생태계 지도

시작은 브로커 + 클라이언트 라이브러리뿐이다. 나머지는 전부 필요가 생겼을 때 얹는 별도 컴포넌트다 — 각각 “언제”를 아는 것이 이 장의 목적이다.

Kafka Connect — 연동 코드가 반복될 때

섹션 제목: “Kafka Connect — 연동 코드가 반복될 때”

토픽을 읽어 DB에 넣는 컨슈머를 짜는 것은 어렵지 않다. 문제는 그런 코드가 셋, 넷 반복될 때다 — 재시도 · 오프셋 관리 · 스케일 · 배포를 매번 다시 짜게 된다.

Connect는 그 반복을 설정으로 바꾼다. 커넥터(플러그인) + JSON 설정이면 소스(밖→Kafka)·싱크(Kafka→밖) 파이프가 돌고, 오프셋 관리·재시도·병렬화는 프레임워크 몫이다.

  • 대표 사용처는 CDC다 — Debezium이 Postgres·MySQL 등의 트랜잭션 로그를 읽어 행 변경을 토픽으로 흘린다. “DB 변경을 검색 인덱스·캐시·분석계에 전파”가 폴링 없이, 애플리케이션 코드 수정 없이 된다
  • 싱크 쪽 상투: Elasticsearch/OpenSearch(검색), S3/MinIO(보관), JDBC(타 DB)
  • Strimzi가 KafkaConnect·KafkaConnector CRD로 k8s 배포까지 맡아 준다 (9장)

스키마 레지스트리 — 계약을 강제할 때

섹션 제목: “스키마 레지스트리 — 계약을 강제할 때”

7장의 결론 이어서 — 팀·서비스가 늘어 “관용적 JSON + 조심”으로 안 되는 시점이 온다. 레지스트리는 토픽별 스키마(Avro · Protobuf · JSON Schema)를 버전으로 관리하고, 호환성을 등록 시점에 검사한다 — 깨지는 변경이 런타임이 아니라 배포 전에 걸린다.

  • 직렬화 크기도 줄어든다 — Avro는 필드명 없이 바이너리로 나가고, 메시지에는 스키마 ID만 실린다
  • 구현체 선택에 주의 — Confluent Schema Registry는 Confluent Community License라 상용 제약 검토가 필요하다. 온프렘에서 자유로운 대안은 Apicurio Registry(Apache 2.0, Confluent API 호환)

스트림 처리 — 소비하며 계산할 때

섹션 제목: “스트림 처리 — 소비하며 계산할 때”

“토픽을 읽어 → 집계·조인·윈도우 계산 → 다른 토픽에 쓴다”가 필요해지면 —

도구형태어울리는 곳
Kafka Streams자바 라이브러리 — 앱에 내장, 별도 클러스터 없음서비스 옆의 중간 규모 집계 · exactly-once가 필요한 토픽→토픽 처리 (6장)
Flink별도 클러스터 (k8s 오퍼레이터 있음)대규모 · 다(多)소스 · SQL로 짜는 본격 스트림 처리

단순 필터·변환이면 그냥 컨슈머로 충분하다 — 상태(집계·조인)가 생길 때가 도입 시점이다. 이 덱에서는 여기까지만 다룬다.

관리 UI

Kafbat UI (구 kafka-ui) · Redpanda Console — 토픽 · 컨슈머 그룹 · 랙 · 메시지 내용을 브라우저로 본다. 온프렘이면 하나는 꼭 띄워 둔다.

CLI

배포판 동봉 kafka-topics.sh · kafka-consumer-groups.sh(랙 확인의 기본 도구), 그리고 만능 단검 kcat — 토픽에 찔러 넣고 빼 보는 데 제일 빠르다.

지표 수집

Strimzi 내장 Prometheus 지표 + kafka-exporter(랙) → Grafana. 구성은 10장에서.

클러스터 간 복제

MirrorMaker 2 — DR · 멀티 사이트가 요구되면 그때 꺼낼 이름. 이 덱 범위 밖이다(0장).

  • 시작은 브로커 + 클라이언트 라이브러리 — 나머지는 필요가 생길 때 얹는다
  • 반복 패턴 연동 → Connect (CDC는 Debezium), 업무 로직 섞이면 그냥 컨슈머
  • 형식 계약이 사람 조심을 넘어서면 → 스키마 레지스트리 (온프렘 라이선스는 Apicurio 검토)
  • 소비하며 상태 있는 계산 → Streams(라이브러리) 또는 Flink(클러스터)
  • 눈과 손 — 관리 UI 하나 · kafka-consumer-groups.sh · kcat은 미리 갖춰 둔다