Kafka Connector?
Last updated
Last updated
카프카 커넥터(Kafka Connector)는 Apache Kafka의 데이터 통합 기능을 확장하기 위해 Kafka Connect 프레임워크에서 제공되는 중요한 구성 요소입니다. 이를 통해 다양한 소스에서 카프카로 데이터를 쉽게 수집하고, 카프카에서 외부 시스템으로 데이터를 전달할 수 있습니다. 카프카 커넥터를 사용하면 커스텀 코딩 없이 데이터 파이프라인을 자동화할 수 있습니다.
Kafka Connect는 데이터 스트림의 연동을 쉽게 구현할 수 있도록 설계된 프레임워크입니다. 커넥터는 이 프레임워크 위에서 실행되며, 소스 커넥터(Source Connector)와 싱크 커넥터(Sink Connector) 두 가지 종류로 나뉩니다.
소스 커넥터: 외부 시스템에서 데이터를 카프카 토픽으로 보내는 역할을 합니다.
예: MySQL, PostgreSQL, MongoDB, Elasticsearch 등에서 데이터를 가져와 Kafka로 전송.
싱크 커넥터: 카프카 토픽에서 데이터를 가져와 외부 시스템에 저장하는 역할을 합니다.
예: 데이터를 HDFS, Elasticsearch, RDBMS 등에 저장.
확장성: 분산형으로 동작하여 여러 인스턴스를 배포하고 관리할 수 있습니다. 내결함성: 커넥터가 실패하더라도 자동으로 복구할 수 있는 메커니즘을 제공합니다. 관리 편의성: REST API를 통해 커넥터를 배포, 설정, 모니터링할 수 있습니다. 변환(Transformation): 스트림 데이터 변환 및 처리 기능을 통해 데이터를 원하는 형태로 가공할 수 있습니다.
Kafka 커넥터는 데이터를 읽고 쓰는 과정에서 데이터를 변환할 수 있습니다. 이 기능은 데이터 포맷을 일치시키거나, 불필요한 필드를 제거하는 등의 작업을 처리할 때 유용합니다.
SMT 예시:
필드 값의 형식을 변환하거나, 메시지에서 특정 필드를 삭제 또는 추가하는 작업.
예를 들어, 특정 JSON 데이터의 일부 필드를 필터링하여 전송할 때 SMT를 사용합니다.
Kafka 소스 커넥터는 외부 시스템으로부터 데이터를 읽어와 Kafka 토픽에 전달하는 역할을 합니다.
주로 데이터 수집 파이프라인에서 데이터를 Kafka로 스트리밍하기 위해 사용되며, 데이터베이스, 메시징 시스템, 파일 시스템 등 다양한 소스에서 데이터를 가져올 수 있습니다.
Kafka 소스 커넥터는 외부 시스템에서 발생하는 데이터를 Kafka로 지속적으로 전송하는 역할을 합니다. 이를 통해 다양한 데이터 소스를 통합하고, 실시간 스트리밍 환경에서 데이터를 처리할 수 있습니다.
소스 시스템: 데이터를 제공하는 외부 시스템(예: MySQL, MongoDB, 파일 시스템, 클라우드 서비스 등)
Kafka 토픽: 소스 커넥터가 데이터를 전송하는 목적지(Kafka의 데이터 스트림)
소스 커넥터의 동작 방식은 소스 시스템에서 Kafka 클러스터로 데이터를 가져오는 과정입니다.
커넥터 초기화:
Kafka 소스 커넥터가 시작되면 설정 파일을 바탕으로 외부 소스 시스템에 연결하고, 필요한 초기화 작업을 수행합니다. 예를 들어, 데이터베이스 커넥터의 경우 JDBC 드라이버를 사용해 데이터베이스에 연결합니다.
데이터 읽기:
소스 커넥터는 소스 시스템으로부터 데이터를 주기적으로 읽어옵니다. 이때 폴링 방식이나 이벤트 기반 방식을 사용합니다.
폴링 방식: 일정 시간 간격으로 외부 시스템에서 새로운 데이터를 조회.
이벤트 기반: CDC(Change Data Capture)처럼 데이터 변경 이벤트를 실시간으로 감지.
Kafka 토픽으로 데이터 전송:
읽어온 데이터를 Kafka의 특정 토픽으로 전송합니다.
이 데이터는 Kafka 토픽에 메시지 형태로 저장되며, 필요에 따라 데이터는 Kafka Streams나 소비자 애플리케이션에서 처리됩니다.
오프셋 관리:
소스 커넥터는 데이터를 읽어온 위치(오프셋)를 기록하여, 중단 후 재시작 시 중복 없이 데이터를 이어서 처리할 수 있습니다.
오프셋은 Kafka의 __consumer_offsets 토픽에 저장됩니다.
커넥터(Connector): 데이터를 소스 시스템에서 Kafka로 전송하는 주요 구성 요소입니다.
태스크(Task): 커넥터는 데이터를 병렬로 처리하기 위해 여러 태스크로 분할됩니다. 각 태스크는 병렬로 실행되어 처리량을 높입니다.
오프셋(Offset): 커넥터가 소스 시스템에서 데이터를 읽어온 위치를 추적하는데 사용됩니다. 이를 통해 데이터를 중복 없이 지속적으로 읽을 수 있습니다.
변환(Transformation): 데이터를 읽어오는 과정에서 **Single Message Transformations(SMT)**를 사용해 메시지를 변환할 수 있습니다. 예를 들어, 불필요한 필드를 제거하거나 특정 필드만 추출할 수 있습니다.
Kafka 싱크 커넥터는 Kafka 토픽에서 읽은 데이터를 외부 시스템에 저장하는 역할을 합니다. Kafka에서 데이터를 소비하고 이를 데이터베이스, 파일 시스템, 클라우드 스토리지 또는 다른 시스템으로 전달할 수 있습니다.
싱크 커넥터는 Kafka에서 데이터를 소비하여 외부 시스템으로 데이터를 전송하는 역할을 합니다.
이는 일반적으로 데이터 저장, 분석, 모니터링 또는 백업 작업과 관련이 있습니다. 외부 시스템에는 데이터베이스, Elasticsearch, HDFS, Amazon S3 같은 스토리지 시스템 등이 포함됩니다.
소스 시스템: Kafka 토픽에서 데이터를 가져오는 역할.
외부 시스템: 데이터가 전송되는 목적지. (예: MySQL, MongoDB, HDFS, Elasticsearch)
싱크 커넥터는 Kafka 토픽에서 데이터를 읽고, 이를 외부 시스템으로 전달하는 방식으로 동작합니다. 구체적으로는 아래와 같은 과정으로 데이터를 처리합니다.
커넥터 초기화:
Kafka 싱크 커넥터가 시작되면, Kafka 토픽과 외부 시스템을 설정합니다. 예를 들어, MySQL 데이터베이스 싱크 커넥터의 경우, 데이터베이스 연결 설정과 Kafka 토픽을 설정합니다.
Kafka 토픽에서 데이터 읽기:
싱크 커넥터는 Kafka 토픽에서 데이터를 읽어옵니다. Kafka 토픽에서 데이터를 읽기 위해 소비자(consumer) 역할을 하며, 새로운 데이터를 주기적으로 가져옵니다.
외부 시스템으로 데이터 전송:
읽어온 데이터를 외부 시스템으로 전송합니다. 데이터베이스라면 SQL 쿼리를 통해 데이터를 삽입하거나 업데이트하고, 파일 시스템이라면 파일을 생성하여 데이터를 기록할 수 있습니다.
오프셋 관리:
소스 커넥터와 마찬가지로, 싱크 커넥터도 오프셋을 관리하여 중복 없이 데이터를 처리할 수 있습니다. 오프셋은 Kafka의 __consumer_offsets
토픽에 저장되어, 커넥터가 재시작되더라도 데이터 처리가 연속적으로 이루어집니다.
커넥터(Connector): Kafka 토픽에서 데이터를 읽어 외부 시스템으로 전송하는 역할을 합니다.
태스크(Task): 싱크 커넥터는 여러 태스크로 분할하여 병렬로 데이터를 처리할 수 있습니다. 이는 데이터 전송의 성능을 향상시키고 확장성을 제공합니다.
오프셋(Offset): 싱크 커넥터가 Kafka 토픽에서 데이터를 어느 시점까지 읽었는지를 추적합니다. 이를 통해 중단 없이 데이터를 연속적으로 전송할 수 있습니다.
변환(Transformation): 싱크 커넥터는 Kafka에서 데이터를 가져온 후, 필요에 따라 데이터를 변환하여 외부 시스템에 적합한 형식으로 만들 수 있습니다.