코딩 해파리

Kafka Connector에 Debizium 플러그인 설치 및 적용 본문

Project/졸업 프로젝트

Kafka Connector에 Debizium 플러그인 설치 및 적용

haepalea 2025. 2. 5. 14:36

- 개발 환경 -

 

애플실리콘 MacOS

GCP - GKE

 

 

 

마주했던 문제 상황...

 

1. GCP에서 Google K8s Engine을 통해 애플리케이션을 배포

2. GCP의 Managed Kafka가 아직 베타인건지... 제대로된 안내 or 레퍼런스가 존재 x -> 포기

3. 인프라 담당한 팀원이 Confluent Kafka 공식 사이트의 Helm 차트 안내서를 통해 카프카를 통합 배포

4. 현재 Outbox - CDC 패턴을 적용하여 Debezium이 필요

5. 통합 배포된 Kafka Connector에 Debezium 플러그인이 필요

 

이런 상황을 겪으신 분들이 있을지... 모르겠지만... ㅎㅎ;;

해결책을 공유해보겠습니다


원래 로컬에서 테스트할 때는 Debezium이 미리 설치된 이미지를 쓰기 때문에 당연히 문제가 없습니다...

근데... Confluent Kafka 공식 페이지의 헬름 차트로 바로 띄운거라... 당연하게도 커넥터 이미지에 Debezium 플러그인이 없는거죠

 

눈으로 확인해보고자 하신다면,

 

~$ kubectl edit connect

 

이 명령어를 눌러서 image 쪽을 보면 

 

image:
  application: confluentinc/cp-server-connect:7.8.0 <수정할 이미지>
  init: confluentinc/confluent-init-container:2.10.0


아마... 버전이 다를 순 있지만 비슷하게 설정이 되어 있을겁니다.

저 <수정할 이미지> 쪽을 저희가 따로 이미지를 만들어서 바꿔치기 하면 문제를 해결할 수 있습니다..!

 

해결 순서는

1. Dockerfile 만들기

2. 이미지로 빌드

3. DockerHub에 푸쉬

4. 이미지 바꿔치기

 

1번) Dockerfile을 만들어봅시다

# 예시: Confluent Connect + Debezium MySQL 플러그인
FROM confluentinc/cp-server-connect:7.8.0
# Debezium MySQL Connector 설치
RUN confluent-hub install --no-prompt debezium/debezium-connector-mysql:latest

 

2번) 이 Dockerfile로 이미지를 만들어보죠

Dockerfile이 있는 폴더에서 아래와 같이 명령어를 눌러봅시다

# (1) Docker 빌드
docker build -t <YOUR_REGISTRY>/cp-connect-debezium:1.0 .
# (2) 빌드 완료 후, 이미지가 로컬 Docker 환경에 생성되었는지 확인
docker images

 

예시 -> docker build -t my-docker-id/cp-connect-debezium:1.0 .

 

3번) 이 이미지를 DockerHub에 푸쉬합니다

docker login
docker push my-docker-id/cp-connect-debezium:1.0

 

4번) 이미지 바꿔치기

image:
  application: my-docker-id/cp-connect-debezium:1.0
  init: confluentinc/confluent-init-container:2.10.0

 

이렇게 푸쉬한 이미지로 바꿔치기 하면 됩니다

근데 여기서 끝은 아닙니다.

이게 진짜 귀신이 곡할 노릇이였는데...

 

저희가 Debezium으로 CDC를 한다는 것이

MySQL의 bin.log를 기반으로 변경사항을 추적해야 한다는 말입니다.

AWS의 RDS는 어떤지 모르겠는데...

저희 팀의 경우 GCP의 SQL 서비스를 사용중이었습니다..

근데 이게...?

디폴트 설정으로는 MySQL 서버에서 복제에 필요한 바이너리 로그가 사용 설정되어 있지 않습니다...

 

그러니까, 이걸 사용 설정을 해야하는 것이죠...

다른 서비스를 사용하시면 따로 찾아보셔야 할텐데..

제 상황에서 해결방법은 별거 없슴다...

(저는 이 별거 없는것때메 좀... 고통받았지만...)

 

SQL 들어가서 생성된 인스턴스를 누르고, 상단에 수정을 누릅니다.

그리고 데이터 보호 -> 자동 일일 백업, point-in-time recovery를 체크

이제 이러면 아마 문제 없이 작동하실겁니다...!

 

물론 outbox-connector 설정하는 json을 커넥터에 보내는 건 잊지 마시구요!