[서버] Kafka Connect 에 대해

최동근·2023년 10월 24일
0
post-thumbnail

이번 포스팅에서는 Apache Kafka 생태계의 중요한 구성 요소 중 하나로, 데이터 소스와 데이터 대상 간의 데이터 이동을 담당하는 분산 데이터 플랫폼인 Kafka Connect 에 대해서 알아보고 간단한 실습을 해보겠습니다 ❗️
[서버] Kafka 와 Spring Boot 애플리케이션 연동 을 먼저 공부하시는 것을 추천드립니다 🧐

🎮 Kafka Connect 에 대해

1. kafka Connect 란?

Kafka 는 크게 메세지를 발행하는 Producer , 메세지를 소비하는 Producer, 그리고 통합/중앙화된 전송 영역을 제공하는 Kafka Broker 로 구성됩니다.
하나 이상의 Kafka BrokerKafka Cluster 에 저장되며 긱 Kafka Broker 는 여러개의 topic 을 가지며 topic 에 메세지가 저장됩니다.
: [서버] Kafka 에 대해서

실제 Kafka 시스템을 분산 시스템에 적용 할때 개발자는 Producer Application, Consumer Application 그리고 Kafka Broker 을 구동시켜야 하는데 여기서 직접 파이프라인을 구축해야합니다.
구축해야할 파이프라인이 몇개 없다면 간단하고 쉽게 구축할 수 있겠지만, 파이프라인이 여러개라면 매번 반복적으로 파이프라인을 구성해야합니다 🤔

또한 만약 ProducerConsumer 가 코드를 작성할 수 없고 변경도 불가능한 시스템(ex. DB, storage service, Amazon S3, ES 등)일 때 Kafka 데이터 파이프라인을 직접 구성할 수 없습니다.

이러한 문제점을 해결하기 위해 탄생한 것이 Kafka Connect 입니다 ❗️

Kafka Connct는 반복적인 파이프라인 구축의 번거로움을 쉽고 간편하게 하고, 직접 파이프라인 구축이 어려운 시스템을 위해 만들어진 Apache Kafka 프로젝트 중 하나입니다.

2. Kafka Connect 내부 구조 및 용어 정리

Kafka ConnectConnect 서버와 Connect 서버에 의해 구동되는 Source Connector , Sink Connector 로 구성됩니다.

[용어 정리]

Connect : Connector 가 동작하게 하는 서버(8083 포트)
Connector : Data Source(DB) 의 데이터를 처리하는 소스가 들어있는 jar 파일
Source Connector : Data Source(DB) 에 담긴 데이터를 topic 에 담는 역할을 하는 connector
Sink Connector : topic 에 담긴 특정 데이터를 특정 Data Source(DB) 로 보내는 역할을 하는 connector

여기서 Source ConnectorProducer 애플리케이션 역할을 하는 것으로 이해하면 되고, Sink ConnectorConsumer 애플리케이션 역할을 하는 것으로 이해하면 됩니다.

[모드 종류]

Standalone(단일 모드) : 하나의 Connect 만 사용하는 모드
Distributed(분산 모드) : 여러개의 Connect을 한개의 Cluster로 묶어서 사용하는 모드(고가용성 보장)

  • Standalone 모드 는 1개의 Connect Server 을 구동시키는 모드이기 때문에 가용성 측면에서 떨어집니다.
    따라서 단일장애점(Single Point of Failure) 문제가 발생할 수 있습니다.
    따라서, 주로 개발환경이나 중요도가 낮은 데이터 파이프라인을 운영할 때 사용합니다.

  • Distributed 모드 는 2개 이상의 Connect Server 을 Cluster 형태로 운영함으로서 고 가용성을 보장합니다.
    데이터 처리량의 변화에도 유연하게 대응할 수 있는 Scale Out 을 지원하며 실제 상용환경에서 사용하는 것이 좋습니다.

3. Kafka Connect 실습에 들어가기 앞서

Kafka Conenct 에서는 File Sink Connector, File Source Connector 등 기본적인 Connector 을 플러그인으로 제공합니다.
뿐만 아니라, 오픈소스 Connector 가 존재하는데 오픈소스 Connector 는 직접 Connector을 만들 필요가 없으며 Confluent Hub 에서 쉽게 구할 수 있습니다.

따라서 이외에 사용자가 추가하고 싶은 Connector가 있다면 플러그인 형태로 jar 파일을 추가해서 사용할 수 있습니다.(이번 포스팅에서는 Jdbc Connector 을 추가해서 사용)

사용자는 사용하고자 하는 Connector 을 준비 하고 Connect 에 Connector 생성 명령을 내리면 Connect 는 내부적으로 Connector 와 task 을 생성합니다.
이때 사용자는 ConverterTransform 기능을 옵션으로 추가할 수 있습니다.
이러한 옵션은 반드시 필요한 부분은 아니지만, 데이터 파이프라인 에서 데이터 처리를 좀 더 쉽게 해줍니다.
: [Kafka] 카프카 커넥트


🎮 Kafka Connect 설치 및 실행

이제부터 Kafka Connect 을 구동시켜보겠습니다.

이번 실습에서는 confluent 사의 Kafka Connect 을 사용할 것이고, SpringCloud_MicroService 프로젝트 기반으로 Kafka Connect 을 사용해서 Maria Database System 간의 데이터 파이프라인을 구축할 것입니다.
따라서 JdbcConnector 을 사용할 것입니다.

: Confluent 공식 사이트

1. Kafka Broker 구동

Kafka Connect 을 구동시키기 위해서는 Kafka Broker 가 구동된 상태여야 합니다.
[서버] Kafka 와 Spring Boot 애플리케이션 연동 을 참고해서 Kafka Broker 을 구동시킵니다.

  • Zookeeper 구동 명령어

./bin/zookeeper-server-start.sh ./config/zookeeper.properties

  • Kafka Broker 구동 명령어

./bin/kafka-server-start.sh ./config/server.properties

2. Kafka Connect 설치 및 구동

curl -O http://packages.confluent.io/archive/6.1/confluent-community-6.1.0.tar.gz

해당 명령어를 통해 Kafka Connect 을 설치해줍니다.
설치 후에 생성된 confluent-community-6.1.0.tar.gz 압축 파일을 압축 해제합니다.

tar xvf confluent-community-6.1.0.tar.gz

이렇게 Kafka Connect 설치가 완료되었습니다.
Kafka Connect 에서 실행되는 모든 동작 및 명령어는 confluent-6.1.0 기준으로 시작합니다 ❗️

./bin/connect-distributed ./etc/kafka/connect-distributed.properties

해당 명령어를 통해 설치한 Kafka Connect 서버를 구동시킬 수 있습니다.

3. Kafka Connect topic 확인

위와 같이 Kafka Connect 을 구동하고 난 후 Kafka 디렉토리에서 topic 을 조회하는 명령어를 실행하여 topic 리스트를 확인합니다.

./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

그림과 같이 Kafka Connect 을 구동한 후 관련 topic 4개가 생성된 것을 확인할 수 있습니다.

🎮 Jdbc Connector 설치 및 설정

1. Jdbc Connector 설치

이번에는 Jdbc Connector 을 설치하고 몇가지 설정을 진행하겠습니다.

https://www.confluent.io/hub/confluentinc/kafka-connect-jdbc

confluent 에서 제공하는 Jdbc Connector 을 설치할 것이기 때문에 위에 링크로 접속해 다운로드 합니다.
다운로드를 하면 zip 폴더를 얻을 수 있으며 압축을 해제합니다.

2. Jdbc Connector 관련 설정

앞에서 준비한 confluentinc-kafka-connet-jdbc-1.7.4 폴더에 들어가면 lib 폴더가 존재하며 해당 폴더 안에 kafka-connect-jdbc-10.7.4.jar 가 존재합니다.

Connector 는 Data Source(DB) 의 데이터를 처리하는 소스가 들어있는 jar 파일이라고 헸습니다.
여기서 kafka-connect-jdbc-10.7.4.jar 가 Connector 역할을 하는 jar 파일(플로그인)이며 파일의 경로를 복사해서
우리가 앞서 구동시켰던 Kafka Connectetc/kafka/connect-distributed.properties 에 입력해줘야 합니다.

[참고] connect-distributed.properties 파일은 Apache Kafka 의 Connect 분산 모드에서 사용되는 설정 파일입니다.

jar 파일의 경로를 복사하고 Kafka Connect 디렉토리로 이동해줍니다.
그리고 etc/kafka/connect-distributed.properties 을 열어줍니다.

code(or vim) ./etc/kafka-connect-distributed.properties

connect-distributed.properties 을 열어준 후, plugin.path 부분을 아까 복사했던 Connector jar 파일 경로로 바꿔줍니다.


🎮 마무리


참고

Kafka Connect
Kafka Connect란?
[Kafka] 카프카 커넥트
[Kafka] Kafka Connect 개념/예제
07. 데이터 파이프라인 구축하기
[Kafka] Kafka Connect - JDBC Connector 예제

profile
비즈니스가치를추구하는개발자

0개의 댓글