Kafka

[Kafka] 카프카 기본 개념_3 (소스 커넥트, 싱크 커넥트, 커넥터)

15호의 개발자 2022. 1. 31. 15:23
반응형

[Kafka] 카프카 기본 개념 및 간단한 설명

 

(카프카 기본 개념에 대한 내용은 아래 두 개의 링크를 참고하면 좋다.)

 

[Kafka] 카프카 기본 개념_1 (브로커, 프로듀서, 컨슈머, 메시지 + 주키퍼)

[Kafka] 카프카 기본 개념 및 간단한 설명 카프카란? 카프카(Kafka) 또는 카프카 클러스터(Kafka Cluster)는 분산 스트리밍 플랫폼으로써, 여러 대의 브로커를 구성한 클러스터를 의미한다. 카프

unit-15.tistory.com

 

 

[Kafka] 카프카 기본 개념_2 (토픽, 파티션, 세그먼트, 리플리케이션, 리더-팔로워)

[Kafka] 카프카 기본 개념 및 간단한 설명 토픽 ⊃ 파티션 ⊃ 세그먼트 1. 토픽(topic) 카프카는 메시지 피드들을 토픽으로 구분한다. 각 토픽의 이름은 카프카 내에서 고유하다. 2. 파티션(partiti

unit-15.tistory.com

 


 

카프카 커넥트

카프카 커넥트(Kafka Connect)는 아파치 카프카의 오픈소스 프로젝트로, 데이터베이스와 같은 외부 시스템과 카프카를 쉽게 연결해주는 프레임워크이다. 카프카에서 공식적으로 제공하는 컴포넌트 중 하나이며, 이는 곧 카프카 생태계에서 빠질 수 없는 아주 중요한 플랫폼이라고 보면 된다. 데이터 파이프라인을 반복적으로 만들어내고 개발/배포/운영할 때는, 컨슈머나 스트림즈를 개발하는 것보다 카프카 커넥트를 이용하는 것이 훨씬 효과적이다. 카프카 클러스터를 상용 운영하고 있는 경우라면 반드시 도입을 검토해볼 만큰 아주 중요한 데이터 파이프라인 플랫폼이다. 

 

카프카 커넥트의 장점

1) 데이터 중심 파이프라인
  - 커넥트를 이용하여 카프카로 데이터를 보내거나 카프카에서 데이터를 가져온다.
2) 유연성 & 확장성
  - 단독 모드와 분산 모드(클러스터형)로 실행 가능하다. 각각 테스트시, 운영시 사용한다.
3) 재사용성 & 기능 확장
  - 이미 만들어져있는 기존 커넥터를 활용할 수 있고, 운영 환경에 맞게 설정을 변경할 수 있다.
4) 장애 복구
  - 카프카 커넥트를 분산 모드로 실행하면, 워커 노드의 장애 발생 시 유연하게 대응 가능하다.

 

 

 

소스 커넥트, 싱크 커넥트

 

소스 DB와 카프카 클러스터 사이에 위치한 커넥트를 소스 커넥트라 부르며, 싱크 DB와 카프카 클러스터 사이에 위치한 커넥트를 싱크 커넥트라 부른다. 소스 커넥트는 프로듀서 역할을 하고 싱크 커넥트는 컨슈머 역할을 한다고 생각하면 된다.

 

 

 

단일 실행 모드 커넥트, 분산 모드 커넥트

커넥트는 단일 실행 모드 커넥트와 분산 모드 커넥트 두 가지로 이루어진다.

 

  1. 단일 실행모드 커넥트
    간단한 데이터 파이프라인을 구성할 때나 개발용으로 주로 사용한다. 실질적으로 상용으로 사용할 것이면 분산 모드 커넥트로 구성해서 운영하는 게 낫다.
  2. 분산 모드 커넥트
    분산 모드 커넥터는 이름에서부터 알 수 있듯이 여러 개의 프로세스(즉, 커넥트)를 한 개의 커넥트 클러스터로 묶어서 운영하는 방식이다. 즉, 두 개 이상의 커넥트가 하나의 클러스터로 묶이는 것이다. 이렇게 클러스터로 묶은 커넥트는 일부 커넥트에 장애가 발생하더라도 파이프라인을 자연스럽게 failover를 해서 나머지 실행 중인 커넥트에서 데이터를 지속적으로 처리할 수 있도록 도와준다.

 

위 그림은 분산 모드 소스 커넥트를 그린 모습이다. 분산 모드의 경우 한 워커에서 장애가 생기더라도, 커넥터와 태스크들이 다른 워커로 이동하기 때문에 안정적인 서비스를 운영할 수 있다.

 

워커(worker) 카프카 커넥트 프로세스가 실행되는 서버나 인스턴스를 뜻하며, 커넥터와 태스크가 워커에서 실행된다.

 


 

커넥트 (Connect) vs 커넥터 (Connector)

카프카 커넥트는 커넥트커넥터로 이루어져있다. (단어가 한 끝 차이여서 헷갈리기 쉽지만 둘은 엄밀히 다른 것이므로 주의해야 한다.)

 

카프카 커넥트커넥터를 동작하도록 실행해주는 프로세스이다. 그러므로 파이프라인으로 동작하는 커넥터를 동작시키기 위해서는 반드시 커넥트를 실행시켜야 한다. 즉, 커넥터를 실행해주는 것이 커넥트이다.

 

커넥터데이터를 어디에서 어디로 복사할지 관리하는 역할을 하며, 실질적으로 데이터를 처리하는 코드가 담긴 jar 패키지라고 보면 된다. 커넥터는 일련의 템플릿과 같은 특정 동작을 하는 코드 뭉치라고 보면 된다. 그래서 커넥터 안에는 파이프라인에 필요한 여러가지 동작들과 설정, 그리고 실행하는 메서드들이 포함되어 있다. 따라서 토픽에 있는 데이터를 오라클 DB에 저장하고 싶다면, 커넥터에 insert 메서드를 구현하고 커넥터를 실행하는 방법으로 운영하면 된다.

 

 

 

소스 커넥터, 싱크 커넥터

커넥터 또한 소스 커넥터와 싱크 커넥터가 존재한다.

 

  1. 싱크 커넥터 (Sink Connector)
    단어 그대로 어딘가로 데이터를 싱크(sink)한다는 뜻으로, 특정 토픽에 있는 데이터를 오라클/MySQL/ES(Elastic Search)와 같이 특정 저장소에 저장하는 역할을 한다. 즉, 컨슈머와 같은 역할을 한다.
  2. 소스 커넥터 (Source Connector)
    데이터베이스로부터 데이터를 가져와서 토픽에 넣는 역할, 즉 프로듀서의 역할을 한다. 토픽의 데이터를 데이터베이스의 특정 테이블에 넣고 싶다면 싱크 커넥터를 만들어야 한다. 보통 싱크 커넥터 글자 앞에 어떤 데이터베이스에 넣을 것인지 선언한다. 예를 들어, 오라클의 테이블에 데이터를 저장하고 싶다면 OracleSinkConnector라고 선언한다.


관계형 데이터베이스(RDBMS)의 데이터를 카프카로 전송하고 싶은 경우 JDBC 소스 커넥터를 이용하는 등 해당하는 소스 커넥터를 이용하면 된다.

 

 

 

커넥터와 커넥트의 연결고리

앞서 커넥터를 실행해주는 것이 커넥트라고 설명했다. 그렇다면 이 둘의 연결고리는 어디에 있을까?

 

커넥트를 실행할 때, 커넥터가 어디에 위치하고 있는지 config 파일에 위치를 지정해야 한다. 커넥터 jar 파일이 있는 디렉터리를 config 파일에 지정하게 된다. (아래 참고) 이후 커넥트를 실행하게 되면, 이 jar 파일의 커넥터들을 함께 모아서 커넥터를 실행할 수 있도록 준비 상태에 들어간다.

 

plugin.path=/var/connectors

 

 

실행 중인 커넥트에서 커넥터를 실행하려면 REST API를 통해서 커넥터를 실행할 수 있다. 커넥트를 활용하면 파이프라인을 만들 때, 추가적인 개발을 하거나 배포하는 과정 없이 REST API를 통해서 커넥터를 통한 파이프라인들이 분산돼서 생기게 된다.

 

예를 들어, 오라클 DB에 데이터를 저장하는 OracleSinkConnector가 있다고 가정하자. 특정 토픽에 있는 데이터를 특정 테이블로 보내려는 경우, JSON으로 설정을 만든 후 이 body를 REST API를 통해 커넥트에 이 파이프라인을 만들어달라는 명령을 내린다. 그러면 커넥트에 파이프라인이 생성된다. (매우 쉽다!)

만약 동일한 토픽에 대해서 또 다른 테이블에 추가로 넣고 싶다면, 타깃이 되는 토픽과 싱크하는 테이블 이름을 지정하면 된다. 그리고 나서 REST API로 요청을 하면 파이프라인이 한 개 더 생성될 것이다. REST API를 두 번 호출함으로써 파이프라인이 두 개가 생성된다.

 

 

사실 커넥트를 활용하지 않는다면 이렇게 파이프라인을 반복적으로 만드는 데에는 엄청난 시간이 걸린다. 개발/배포/모니터링 구축 등의 일련의 과정이 커넥트에서는 템플릿 형태로 커넥터를 개발하고 REST API를 통해서 반복적으로 생성하므로 효율이 굉장히 뛰어나다. 따라서 파이프라인을 반복적으로 만드는 상황이라면 굳이 컨슈머로 여러 번 만들기 보다는, 커넥터를 구축하여 반복적으로 커넥터를 실행하는 방식으로 진행하는 것이 좋을 것이다.


커넥트는 반복적인 작업에 아주 효과적이다. 커넥터는 직접 구현할 수도 있지만 이미 깃허브나 컨플루언트에 오픈소스로 많이 나와있기 때문에, 사용하는 카프카 클러스터와 싱크 혹은 소스로 사용하는 데이터베이스가 있다면 관련 커넥터를 검색해서 찾으면 개발을 하지 않더라도 오픈 소스 커넥터를 사용해서 파이프라인을 빠르게 구성할 수 있다.

 

 

(출처: 고승범 『실전 카프카 개발부터 운영까지』, 유튜브 데브원영 DVWY)

반응형