본문 바로가기
Kafka

[Kafka] Kafka Connect

by J_Remind 2025. 1. 30.

 

Kafka Connect는 외부 시스템과 Kafka 간 데이터를 효율적으로 이동하거나 통합하기 위한 오픈소스 프레임워크이다.

Kafka 메시징 시스템을 기반으로 다양한 데이터 소스 시스템에서 발생한 데이터를 다른 타겟 데이터 시스템으로 별도의 Kafka 클라이언트 코딩 없이 실시간으로 전달할 수 있다.

Kafka Connect는 데이터 통합을 위한 Kafka의 핵심 컴포넌트로, 개발자들이 데이터 이동 및 변환을 더욱 쉽게 구현할 수 있도록 설계되었다.

주요 구성 요소

1. Connector

Connector는 데이터를 소스 시스템에서 Kafka로 전송하는 Source Connector와 Kafka에서 타겟 시스템으로 전송하는 Sink Connector로 이뤄진다.

| Connector 정보는 https://www.confluent.io/hub 에서 조회 및 다운로드 할 수 있다.

Connector 대표 종류

  • JDBC Source/SInk Connector: RDBMS 데이터를 Kafka로 가져오거나 전송
  • Debezium CDC Source Connector: MySQL, PostgreSQL, MongoDB 등에서 변경 데이터를 실시간으로 Kafka로 전송
  • Elasticsearch Sink Connector: 데이터를 Elasticsearch 로 전송
  • MongoDB Source/Sink Connector: MongoDB와 Kafka 간 데이터를 가져오거나 전송
  • Spooldir Source Connector: 디렉토리의 파일을 읽어 전송

2. Worker

Kafka Connect를 실행하는 JVM 프로세스이며 Connector를 기동하고 데이터를 처리하는 Task를 관리한다.

3. Task

Worker가 실행하는 쓰레드 단위 작업으로 Connector의 데이터 처리를 담당한다.

4. Transformation (SMT: Single Message Transformation)

https://docs.confluent.io/cloud/current/connectors/single-message-transforms.html

 

메시지의 변환을 수행하는 라이브러리로, 데이터 이동 과정에서 필터링, 포맷 변경 등의 작업을 처리합니다.

SMT 특징

  • Config에 정의하여 사용
  • Kafak Connect에서 제공하는 기본 SMT 클래스 외에, 서드파티 SMT를 플러인 형태로 추가 가능
  • 체인 형태로 여러 변환 적용 가능
  • 복작한 데이터 변환에는 한계

5. Converter

Connector는 데이터를 특정 포맷으로 직렬화하거나 역직렬화하는 역할을 합니다. 데이터를 특정 포맷(JSON, Avro, Protobuf 등)으로 변환하여 Kafka 토픽에 저장하거나 외부 시스템으로 전달합니다.

  • JsonConverter: JSON 형식의 메시지 처리
  • AvroConverter: Avro 포맷 지원
  • ProtobufConverter: Protobuf 포맷 지원
  • String, ByteArray: 단순 문자열 및 바이너리 처리

6. Config

Config는 Connector를 설정하기 위한 정보를 파일로 정의한다.

  • MySQL Source Connector Config 예제
{
    "name": "mysql_source_connector",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "tasks.max": "1",
        "database.hostname": "localhost",
        "database.port": "3306",
        "database.user": "user",
        "database.password": "password",
        "database.allowPublicKeyRetrieval": "true",

        "database.server.id": "10000",
        "database.server.name": "test01",
        "database.include.list": "schema_ex",
        "table.include.list": "schema_ex.table_name",
        "database.history.kafka.bootstrap.servers": "localhost:9092",
        "database.history.kafka.topic": "mysql_cdc_test",
        "key.converter": "org.apache.kafka.connect.json.JsonConverter",
        "value.converter": "org.apache.kafka.connect.json.JsonConverter",
     
        "transforms": "unwrap",
        "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
        "transforms.unwrap.drop.tombstones": "false"
    }
}

Connect Cluster, Worker, Task 개념

Kafka Connect는 여러 개의 Worker로 이루어진 클러스터 구조를 가집니다.

각 Worker는 ConnectorTask를 관리하며, 분산 처리로 높은 확장성을 제공합니다.

구성 요소

  • Worker: Kafka Connect를 실행하는 JVM 프로세스 (단일 또는 다수의 Connector 관리)
  • Task: 각 Connector의 데이터 처리를 담당하는 쓰레드
  • Connect Cluster: 다수의 Worker가 그룹(Group ID)으로 묶여 클러스터를 형성

Kafka Connect의 실행 모드

Standalone Mode

  • 단일 워커(Worker) 프로세스에서 실행됩니다.
  • 주로 테스트나 간단한 작업에 사용되며, 분산 처리가 불가능합니다.

Distributed Mode

  • 여러 워커(Worker)로 구성된 클러스터에서 실행됩니다.
  • 고가용성과 확장성을 제공하며, 프로덕션 환경에서 주로 사용됩니다.
모드 특징 사용 사례
Standalone Mode - 단일 Worker로 실행
- 단순 설정 파일 사용
- 장애 복구 및 확장성 없음
테스트, 개발 환경
Distributed Mode - 여러 Worker로 실행
- 고가용성과 확장성 제공
- 중앙에서 관리 가능한 REST 인터페이스 제공
프로덕션 환경

Schema Registry

Kafka ConnectSchema Registry를 통해 데이터 Schema를 관리합니다.

  • 데이터가 Kafka로 전송될 때 Schema ID + Version만 포함하므로, 각 메시지에 Schema를 중복 포함할 필요가 없습니다.
  • 이를 통해 데이터 크기 최적화스키마 호환성 관리를 제공합니다.

Kafka Connect의 동작 구조

Source Connector 동작 과정

  1. Source 시스템(예: MySQL)에서 변경 사항을 주기적으로 확인합니다.
  2. 변경된 데이터를 Kafka로 전송하기 전, Transforms에서 데이터를 변환합니다.
  3. 데이터는 Converter를 통해 직렬화(Serialization)됩니다.
  4. Producer를 통해 데이터를 Kafka 클러스터로 전송합니다.

Sink Connector 동작 과정

  1. Kafka 클러스터에서 데이터를 읽어옵니다.
  2. 데이터를 Converter로 역직렬화(Deserialization)합니다.
  3. Transforms에서 데이터를 변환합니다.
  4. 타겟 시스템(예: Elasticsearch)으로 데이터를 저장합니다.

Kafka Connect 내부 정보 토픽

Kafka Connect는 내부적으로 offset, config, 상태 정보를 관리하기 위해 특별한 토픽을 사용합니다.

토픽명 설명

connect-offsets Source Connector의 메시지 오프셋 정보 (중복 전송 방지)
connect-configs Connector의 설정 정보를 저장 (재기동 시 활용)
connect-status Connector의 상태 정보를 저장
__consumer_offsets Sink Connector의 메시지 소비 오프셋 정보 (중복 소비 방지)

 

Kafka Connect의 장점

Kafka Connect는 다양한 시스템 간 데이터를 실시간으로 통합하고 이동할 수 있는 강력한 프레임워크입니다. 주요 장점은 다음과 같습니다:

  • 확장성: Distributed Mode를 통해 높은 확장성을 제공
  • 유연성: 다양한 외부 시스템과 쉽게 통합할 수 있는 Connector를 제공
  • 실시간 데이터 처리: 실시간으로 데이터를 전송하고 변환할 수 있
  • 데이터 일관성: Schema Registry와 내부 오프셋 관리를 통해 데이터의 일관성과 무결성을 보장

 

'Kafka' 카테고리의 다른 글

[Apache Kafka] Kafka Group Consumer Rebalance  (0) 2024.12.28
[Apahce Kafka] Kafka Consumer  (1) 2024.12.28
[Apache Kafka] Kafka Producer  (0) 2024.12.26
[Apache Kafka] Kafka Replication란?  (0) 2024.09.18
[Apache Kafka] 카프카란 무엇인가?  (0) 2024.09.18