이번 포스팅에서는 Apache Kafka 생태계의 중요한 구성 요소 중 하나로, 데이터 소스와 데이터 대상 간의 데이터 이동을 담당하는 분산 데이터 플랫폼인 Kafka Connect
에 대해서 알아보고 간단한 실습을 해보겠습니다 ❗️
[서버] Kafka 와 Spring Boot 애플리케이션 연동 을 먼저 공부하시는 것을 추천드립니다 🧐
Kafka 는 크게 메세지를 발행하는 Producer
, 메세지를 소비하는 Producer
, 그리고 통합/중앙화된 전송 영역을 제공하는 Kafka Broker
로 구성됩니다.
하나 이상의 Kafka Broker
는 Kafka Cluster
에 저장되며 긱 Kafka Broker
는 여러개의 topic 을 가지며 topic 에 메세지가 저장됩니다.
: [서버] Kafka 에 대해서
실제 Kafka 시스템을 분산 시스템에 적용 할때 개발자는 Producer
Application, Consumer
Application 그리고 Kafka Broker
을 구동시켜야 하는데 여기서 직접 파이프라인을 구축해야합니다.
구축해야할 파이프라인이 몇개 없다면 간단하고 쉽게 구축할 수 있겠지만, 파이프라인이 여러개라면 매번 반복적으로 파이프라인을 구성해야합니다 🤔
또한 만약 Producer
와 Consumer
가 코드를 작성할 수 없고 변경도 불가능한 시스템(ex. DB, storage service, Amazon S3, ES 등)일 때 Kafka 데이터 파이프라인을 직접 구성할 수 없습니다.
이러한 문제점을 해결하기 위해 탄생한 것이 Kafka Connect
입니다 ❗️
Kafka Connct는 반복적인 파이프라인 구축의 번거로움을 쉽고 간편하게 하고, 직접 파이프라인 구축이 어려운 시스템을 위해 만들어진 Apache Kafka 프로젝트 중 하나입니다.
Kafka Connect
은 Connect
서버와 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 Connector
는 Producer
애플리케이션 역할을 하는 것으로 이해하면 되고, Sink Connector
는 Consumer
애플리케이션 역할을 하는 것으로 이해하면 됩니다.
[모드 종류]
Standalone(단일 모드) : 하나의 Connect 만 사용하는 모드
Distributed(분산 모드) : 여러개의 Connect을 한개의 Cluster로 묶어서 사용하는 모드(고가용성 보장)
Standalone 모드
는 1개의 Connect Server 을 구동시키는 모드이기 때문에 가용성 측면에서 떨어집니다.
따라서 단일장애점(Single Point of Failure)
문제가 발생할 수 있습니다.
따라서, 주로 개발환경이나 중요도가 낮은 데이터 파이프라인을 운영할 때 사용합니다.
Distributed 모드
는 2개 이상의 Connect Server 을 Cluster 형태로 운영함으로서 고 가용성을 보장합니다.
데이터 처리량의 변화에도 유연하게 대응할 수 있는 Scale Out 을 지원하며 실제 상용환경에서 사용하는 것이 좋습니다.
Kafka Conenct
에서는 File Sink Connector, File Source Connector 등 기본적인 Connector 을 플러그인으로 제공합니다.
뿐만 아니라, 오픈소스 Connector
가 존재하는데 오픈소스 Connector
는 직접 Connector을 만들 필요가 없으며 Confluent Hub 에서 쉽게 구할 수 있습니다.
따라서 이외에 사용자가 추가하고 싶은 Connector가 있다면 플러그인 형태로 jar 파일을 추가해서 사용할 수 있습니다.(이번 포스팅에서는 Jdbc Connector 을 추가해서 사용)
사용자는 사용하고자 하는 Connector 을 준비 하고 Connect 에 Connector 생성 명령을 내리면 Connect 는 내부적으로 Connector 와 task 을 생성합니다.
이때 사용자는 Converter
와 Transform
기능을 옵션으로 추가할 수 있습니다.
이러한 옵션은 반드시 필요한 부분은 아니지만, 데이터 파이프라인 에서 데이터 처리를 좀 더 쉽게 해줍니다.
: [Kafka] 카프카 커넥트
이제부터 Kafka Connect
을 구동시켜보겠습니다.
이번 실습에서는 confluent
사의 Kafka Connect
을 사용할 것이고, SpringCloud_MicroService 프로젝트 기반으로 Kafka Connect
을 사용해서 Maria Database System 간의 데이터 파이프라인을 구축할 것입니다.
따라서 JdbcConnector
을 사용할 것입니다.
: Confluent 공식 사이트
Kafka Connect
을 구동시키기 위해서는 Kafka Broker
가 구동된 상태여야 합니다.
[서버] Kafka 와 Spring Boot 애플리케이션 연동 을 참고해서 Kafka Broker
을 구동시킵니다.
./bin/zookeeper-server-start.sh ./config/zookeeper.properties
./bin/kafka-server-start.sh ./config/server.properties
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
서버를 구동시킬 수 있습니다.
위와 같이 Kafka Connect
을 구동하고 난 후 Kafka 디렉토리에서 topic 을 조회하는 명령어를 실행하여 topic 리스트를 확인합니다.
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
그림과 같이 Kafka Connect
을 구동한 후 관련 topic 4개가 생성된 것을 확인할 수 있습니다.
이번에는 Jdbc Connector
을 설치하고 몇가지 설정을 진행하겠습니다.
https://www.confluent.io/hub/confluentinc/kafka-connect-jdbc
confluent
에서 제공하는 Jdbc Connector
을 설치할 것이기 때문에 위에 링크로 접속해 다운로드 합니다.
다운로드를 하면 zip 폴더를 얻을 수 있으며 압축을 해제합니다.
앞에서 준비한 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 Connect
의 etc/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 예제