4장. Kafka Connect 정보
Kafka Connect는 Kafka 브로커와 기타 시스템 간에 데이터를 스트리밍하기 위한 통합 툴킷입니다. 다른 시스템은 일반적으로 데이터베이스 같은 외부 데이터 소스 또는 대상입니다.
Kafka Connect에서는 플러그인 아키텍처를 사용합니다. 플러그인을 사용하면 다른 시스템에 연결하고 데이터를 조작할 수 있는 추가 구성을 제공할 수 있습니다. 플러그인에는 커넥터 및 기타 구성 요소(예: 데이터 변환기 및 변환)가 포함됩니다. 커넥터는 특정 유형의 외부 시스템에서 작동합니다. 각 커넥터는 해당 구성의 스키마를 정의합니다. Kafka Connect에 구성을 제공하여 Kafka Connect 내에서 커넥터 인스턴스를 생성합니다. 그런 다음 커넥터 인스턴스는 시스템 간에 데이터를 이동하기 위한 일련의 작업을 정의합니다.
AMQ Streams는 분산 모드에서 Kafka Connect를 작동하여 하나 이상의 작업자 Pod에 데이터 스트리밍 작업을 배포합니다. Kafka Connect 클러스터는 작업자 Pod 그룹으로 구성됩니다. 각 커넥터는 단일 작업자에서 인스턴스화됩니다. 각 커넥터는 작업자 그룹에 배포되는 하나 이상의 작업으로 구성됩니다. 작업자 전체에 분산하면 확장성이 높은 파이프라인이 허용됩니다.
작업자는 한 형식의 데이터를 소스 또는 대상 시스템에 적합한 다른 형식으로 변환합니다. 커넥터 인스턴스의 구성에 따라 작업자도 변환을 적용할 수 있습니다(Single Message Transforms 또는 SMT라고도 함). 변환은 변환되기 전에 특정 데이터 필터링과 같은 메시지를 조정합니다. Kafka Connect에는 몇 가지 기본 제공 변환이 있지만 필요한 경우 플러그인으로 다른 변환을 제공할 수 있습니다.
4.1. Kafka Connect에서 데이터를 스트리밍하는 방법
Kafka Connect는 커넥터 인스턴스를 사용하여 다른 시스템과 통합하여 데이터를 스트리밍합니다.
Kafka Connect가 시작 시 기존 커넥터 인스턴스를 로드하고 작업자 pod 간에 데이터 스트리밍 작업 및 커넥터 구성을 배포합니다. 작업자는 커넥터 인스턴스에 대한 작업을 실행합니다. 각 작업자는 Kafka Connect 클러스터의 내결함성을 높이기 위해 별도의 Pod로 실행됩니다. 작업자보다 많은 작업이 있는 경우 작업자에는 여러 작업이 할당됩니다. 작업자가 실패하면 해당 작업은 Kafka Connect 클러스터의 활성 작업자에 자동으로 할당됩니다.
스트리밍 데이터에 사용되는 주요 Kafka Connect 구성 요소는 다음과 같습니다.
- 작업을 생성하는 커넥터
- 데이터 이동 작업
- 작업 실행 작업자
- 데이터를 조작하기 위한 변환
- 데이터를 변환할 변환기
4.1.1. 커넥터
커넥터는 다음 유형 중 하나일 수 있습니다.
- Kafka로 데이터를 푸시하는 소스 커넥터
- Kafka에서 데이터를 추출하는 싱크 커넥터
플러그인은 Kafka Connect에 대한 구현을 제공하여 커넥터 인스턴스를 실행합니다. 커넥터 인스턴스는 Kafka 내부 및 외부에서 데이터를 전송하는 데 필요한 작업을 생성합니다. Kafka Connect 런타임은 작업자 Pod 간에 필요한 작업을 분할하는 작업을 오케스트레이션합니다.
MirrorMaker 2.0도 Kafka Connect 프레임워크를 사용합니다. 이 경우 외부 데이터 시스템은 다른 Kafka 클러스터입니다. MirrorMaker 2.0의 특수 커넥터는 소스와 대상 Kafka 클러스터 간의 데이터 복제를 관리합니다.
MirrorMaker 2.0 커넥터 외에도 Kafka는 두 개의 커넥터를 예로 제공합니다.
-
gRPCSourceConnector는 작업자 파일 시스템의 파일에서 Kafka로 데이터를 스트리밍하여 입력 파일을 읽고 각 행을 지정된 Kafka 주제로 보냅니다. -
Kafka에서 작업자의 파일 시스템으로 데이터를 스트리밍하고, Kafka 주제에서 메시지를 읽고, 출력 파일의 각각에 대한 행을 작성합니다.
다음 소스 커넥터 다이어그램은 외부 데이터 시스템에서 레코드를 스트리밍하는 소스 커넥터의 프로세스 흐름을 보여줍니다. Kafka Connect 클러스터는 소스 및 싱크 커넥터를 동시에 작동할 수 있습니다. 작업자는 클러스터의 분산 모드에서 실행되고 있습니다. 작업자는 두 개 이상의 커넥터 인스턴스에 대해 하나 이상의 작업을 실행할 수 있습니다.
Kafka로 데이터를 스트리밍하는 소스 커넥터
- 플러그인은 소스 커넥터의 구현 아티팩트를 제공합니다.
- 단일 작업자가 소스 커넥터 인스턴스를 시작합니다.
- 소스 커넥터는 데이터를 스트리밍하는 작업을 생성
- 작업은 병렬로 실행되어 외부 데이터 시스템을 폴링하고 레코드를 반환합니다.
- 변환된 레코드 조정(예: 필터링 또는 레이블 재지정)
- 변환기는 레코드를 Kafka에 적합한 형식으로 배치합니다.
- 소스 커넥터는 KafkaConnectors 또는 Kafka Connect API를 사용하여 관리합니다.
다음 싱크 커넥터 다이어그램은 Kafka에서 외부 데이터 시스템으로 데이터를 스트리밍할 때 프로세스 흐름을 보여줍니다.
Kafka의 싱크 커넥터 스트리밍 데이터
- 플러그인은 싱크 커넥터의 구현 아티팩트를 제공합니다.
- 단일 작업자가 싱크 커넥터 인스턴스를 시작합니다.
- 싱크 커넥터가 데이터를 스트리밍하는 작업을 생성
- Task는 Kafka를 폴링하고 레코드를 반환하기 위해 병렬로 실행됩니다.
- 변환기는 레코드를 외부 데이터 시스템에 적합한 형식으로 배치합니다.
- 변환된 레코드 조정(예: 필터링 또는 레이블 재지정)
- 싱크 커넥터는 KafkaConnectors 또는 Kafka Connect API를 사용하여 관리합니다.
4.1.2. 작업
Kafka Connect 런타임에서 오케스트레이션한 데이터 전송은 병렬로 실행되는 작업으로 나뉩니다. 작업은 커넥터 인스턴스에서 제공하는 구성을 사용하여 시작됩니다. Kafka Connect는 작업을 인스턴스화하고 실행하는 작업자에 작업 구성을 배포합니다.
- 소스 커넥터 작업은 외부 데이터 시스템을 폴링하고 작업자가 Kafka 브로커에 전송하는 레코드 목록을 반환합니다.
- 싱크 커넥터 작업은 외부 데이터 시스템에 쓰기 위해 작업자로부터 Kafka 레코드를 수신합니다.
싱크 커넥터의 경우 생성된 작업 수는 소비되는 파티션 수와 관련이 있습니다. 소스 커넥터의 경우 소스 데이터를 분할하는 방법은 커넥터에 의해 정의됩니다. 커넥터 구성에서 tasksMax 를 설정하여 병렬로 실행할 수 있는 최대 작업 수를 제어할 수 있습니다. 커넥터는 최대 설정보다 적은 작업을 생성할 수 있습니다. 예를 들어 소스 데이터를 파티션 수로 분할할 수 없는 경우 커넥터는 더 적은 작업을 생성할 수 있습니다.
Kafka Connect의 컨텍스트에서 파티션 은 외부 시스템의 주제 파티션 또는 데이터 shard 를 의미할 수 있습니다.
4.1.3. Worker
작업자는 Kafka Connect 클러스터에 배포된 커넥터 구성을 사용합니다. 구성은 Kafka Connect에서 사용하는 내부 Kafka 항목에 저장됩니다. 작업자는 커넥터 및 해당 작업도 실행합니다.
Kafka Connect 클러스터에는 동일한 group.id 가 있는 작업자 그룹이 포함되어 있습니다. ID는 Kafka 내에서 클러스터를 식별합니다. ID는 KafkaConnect 리소스를 통해 작업자 구성에서 할당됩니다. 작업자 구성은 내부 Kafka Connect 주제의 이름도 지정합니다. 주제에서는 커넥터 구성, 오프셋 및 상태 정보를 저장합니다. 이 항목의 그룹 ID와 이름도 Kafka Connect 클러스터에 고유해야 합니다.
작업자에는 하나 이상의 커넥터 인스턴스 및 작업이 할당됩니다. Kafka Connect 배포에 대한 분산 접근 방식은 내결함성이며 확장 가능합니다. 작업자 Pod가 실패하면 실행 중인 작업이 활성 작업자에 다시 할당됩니다. KafkaConnect 리소스의 replicas 속성 구성을 통해 작업자 Pod 그룹에 추가할 수 있습니다.
4.1.4. 변환
Kafka Connect는 외부 데이터를 변환하고 변환합니다. 단일 메시지 변환은 메시지를 대상 대상에 적합한 형식으로 변환합니다. 예를 들어 변환에서 필드를 삽입하거나 이름을 변경할 수 있습니다.For example, a transform might insert or rename a field. 변환은 데이터를 필터링하고 라우팅할 수도 있습니다. 플러그인에는 작업자가 하나 이상의 변환을 수행하는 데 필요한 구현이 포함되어 있습니다.
- 소스 커넥터는 Kafka에서 지원하는 형식으로 데이터를 변환하기 전에 변환을 적용합니다.
- 싱크 커넥터는 데이터를 외부 데이터 시스템에 적합한 형식으로 변환한 후 적용합니다.
변환은 커넥터 플러그인에 포함하기 위해 JAR 파일에 패키지된 Java 클래스 파일 세트로 구성됩니다. Kafka Connect에서는 표준 변환 집합을 제공하지만 사용자 고유의 변환도 생성할 수 있습니다.
4.1.5. 변환기
작업자가 데이터를 수신할 때 변환기를 사용하여 데이터를 적절한 형식으로 변환합니다. KafkaConnect 리소스의 작업자 구성의 작업자 변환기를 지정합니다.
Kafka Connect는 JSON 또는 Avro와 같은 Kafka에서 지원하는 형식으로 데이터를 변환할 수 있습니다. 또한 데이터 구조를 위한 스키마도 지원합니다. 데이터를 구조화된 형식으로 변환하지 않으면 스키마를 활성화할 필요가 없습니다.
특정 커넥터의 변환기를 지정하여 모든 작업자에 적용되는 일반 Kafka Connect 작업자 구성을 덮어쓸 수도 있습니다.