Kafka Connect는 Kafka 개발자를 위한 데이터 통합에 권장되는 도구입니다. 데이터베이스, 메시지 큐, 파일 시스템과 같은 외부 시스템과 Kafka를 연결하는 프레임워크를 제공합니다.
Kafka Connect는 Google Cloud에서 검증하고 유지관리하는 선별된 기본 제공 커넥터 플러그인 세트를 제공합니다. 이러한 커넥터 플러그인은 자동으로 패치되고 업그레이드되므로 유지보수가 간소화되고 호환성이 보장됩니다.Google Cloud 는 또한 파이프라인의 상태를 유지하기 위해 기본 제공 모니터링 및 로깅을 제공합니다.
Kafka Connect API는 Apache Kafka용 Google Cloud 관리형 서비스의 일부로 제공됩니다. 이러한 API는 managedkafka.googleapis.com를 통해 액세스할 수 있으며 Google Cloud 콘솔 및 클라이언트 라이브러리에 통합되어 있습니다. Kafka Connect를 관리하려면 Google Cloud 콘솔, gcloud CLI, Managed Kafka API, Cloud 클라이언트 라이브러리 또는 Terraform을 사용하면 됩니다.
Kafka Connect 사용 사례
Kafka Connect는 Apache Kafka용 관리형 서비스 클러스터와 다양한 기타 시스템 간의 데이터 통합을 지원합니다. 다음은 몇 가지 주요 사용 사례입니다.
기존 Kafka 배포를 Apache Kafka용 관리형 서비스로 마이그레이션합니다.
재해 복구를 위해 Apache Kafka용 관리형 서비스 클러스터를 다른 리전으로 복제합니다.
Apache Kafka용 관리형 서비스에서 BigQuery, Cloud Storage, Pub/Sub로 데이터를 스트리밍합니다.
Kafka Connect 용어
이 섹션에서는 특정 주요 Kafka Connect 구성요소를 설명합니다.
Connect 클러스터
Connect 클러스터는 사전 패키징된 커넥터 플러그인 및 구성이 포함된 Kafka Connect의 분산형 배포입니다. 각 Connect 클러스터는 기본 Apache Kafka용 관리형 서비스 클러스터와 연결됩니다. 이 기본 클러스터는 Connect 클러스터에서 실행되는 커넥터의 상태를 저장합니다.
일반적으로 기본 Apache Kafka용 관리형 서비스 클러스터는 연결된 Connect 클러스터에서 실행되는 모든 소스 커넥터의 타겟이자 모든 싱크 커넥터의 소스 역할도 합니다.
단일 Managed Service for Apache Kafka 클러스터에는 여러 Connect 클러스터가 있을 수 있습니다. MirrorMaker 2.0을 실행하는 경우 Connect 클러스터는 기본이 아닌 Apache Kafka용 관리형 서비스 클러스터 또는 자체 관리형 Kafka 클러스터에 연결하여 주제 데이터를 읽거나 쓸 수 있습니다. 이 프로세스를 사용하면 서로 다른 클러스터 간에 주제 복제를 사용할 수 있습니다.
리소스 모델의 관점에서 Connect 클러스터는 Apache Kafka용 관리형 서비스 클러스터와 별도의 리소스입니다.
웹사이트 트래픽 데이터를 저장하는 Apache Kafka용 관리형 서비스 클러스터가 있다고 가정해 보겠습니다. 분석을 위해 이 데이터를 BigQuery로 스트리밍하려고 합니다. Connect 클러스터를 만들고 BigQuery 싱크 커넥터를 사용하여 Kafka 주제에서 BigQuery로 데이터를 이동할 수 있습니다. 이 Connect 클러스터는 Managed Service for Apache Kafka 클러스터와 기본 클러스터로 연결되어 있습니다.
커넥터 플러그인
커넥터를 만들기 위한 소프트웨어 패키지입니다. 커넥터의 로직을 정의하는 코드라고 생각하면 됩니다.
커넥터는 소스 또는 싱크 커넥터일 수 있습니다. 소스 커넥터는 소스의 데이터를 Managed Service for Apache Kafka 클러스터에 씁니다.
싱크 커넥터는 Managed Service for Apache Kafka 클러스터의 데이터를 싱크에 씁니다.
Apache Kafka용 관리형 서비스는 커넥터를 생성하도록 구성할 수 있는 여러 유형의 기본 제공 커넥터 플러그인을 지원합니다. 이러한 커넥터는 Pub/Sub 또는 BigQuery와 같은 일반적인 서비스와의 통합을 제공합니다. 이러한 커넥터 플러그인은 다음과 같습니다.
BigQuery 싱크 커넥터 플러그인
Cloud Storage 싱크 커넥터 플러그인
Pub/Sub 소스 커넥터 플러그인
Pub/Sub 싱크 커넥터 플러그인
MirrorMaker 2.0 커넥터 플러그인
커넥터
커넥터는 특정 Connect 클러스터 내에서 실행되는 커넥터 플러그인의 인스턴스입니다. 동일한 커넥터 플러그인에서 생성된 여러 커넥터를 사용할 수 있으며 각 커넥터에는 자체 구성이 있습니다. 구성의 예로는 다양한 인증 세부정보와 운영 설정이 있습니다. 커넥터는 Connect 클러스터 내에서 배포, 구성, 관리됩니다. 시작, 중지, 일시중지, 다시 시작할 수 있으며 구성을 업데이트할 수 있습니다.
커넥터의 구성요소는 다음 섹션에서 설명합니다.
전환수
변환기는 직렬화 및 역직렬화를 담당하는 Kafka Connect 내의 중요한 구성요소입니다. Avro 또는 JSON 형식과 같은 Kafka 주제에 있는 원시 바이트 와이어 형식과 Kafka Connect의 내부 정형 데이터 표현 간에 데이터를 변환합니다.
전환 액션을 취한 사용자의 역할
싱크 커넥터의 경우 변환기는 주제의 와이어 형식에서 Kafka Connect의 내부 구조화된 데이터 표현으로 데이터를 역직렬화하며, 커넥터는 이를 사용하여 타겟 시스템에 씁니다.
소스 커넥터의 경우 변환기는 커넥터에서 제공하는 Kafka Connect의 내부 구조화된 데이터 표현에서 Kafka 주제의 지정된 와이어 형식으로 데이터를 직렬화합니다.
이 내부 형식은 다양한 중간 처리 단계를 지원하는 공통 표현식으로 사용됩니다. 이러한 단계에는 필터, 프레디케이트, 변환, 변환기와 같은 기본 요소가 포함되며, 이러한 요소는 모두 통합된 내부 형식으로 작동합니다. 추상 내부 형식을 사용하면 이러한 중간 단계의 논리가 특정 입력 또는 출력 데이터 형식과 독립적으로 유지됩니다.
데이터를 전달하는 것 외에 데이터와 상호작용해야 하는 경우 변환기가 필요합니다. 특히 컨버터는 세부적이고 구조를 인식하는 방식으로 중간 처리 단계(예: 프레디케이트 또는 변환)를 실행해야 하는 경우에 필요합니다.
조작 없이 소스에서 Kafka로 바이트 문자열 (JSON인 경우도 포함)만 이동하려는 경우에는 변환기가 필요하지 않습니다.
커넥터 구성에서 키 및 값 변환기를 지정하지 않으면 커넥터에서 기본 ByteArrayConverter 값을 사용합니다. org.apache.kafka.connect.converters.ByteArrayConverter 값은 데이터에 변환을 적용하지 않고 데이터를 원래 형식으로 전달합니다.
지원되는 변환기
이 출시 버전에서 Google Cloud 는 다음 내장 변환기를 지원합니다.
org.apache.kafka.connect.converters.ByteArrayConverter: 데이터를 바이트 배열로 변환하거나 바이트 배열에서 변환합니다. 기본 변환기입니다. 커넥터를 통해 데이터를 기본 원시 바이트로 전달합니다.org.apache.kafka.connect.json.JsonConverter: 데이터를 JSON 형식으로 변환합니다.org.apache.kafka.connect.storage.StringConverter: 데이터를 문자열 형식으로 변환합니다.org.apache.kafka.connect.converters.ByteArrayConverter: 데이터를 바이트 배열로 변환하거나 바이트 배열에서 변환합니다.org.apache.kafka.connect.converters.DoubleConverter: 데이터를 Double 형식으로 변환합니다.org.apache.kafka.connect.converters.FloatConverter: 데이터를 Float 형식으로 변환합니다.org.apache.kafka.connect.converters.IntegerConverter: 데이터를 정수 형식으로 변환합니다.org.apache.kafka.connect.converters.LongConverter: 데이터를 Long 형식으로 변환합니다.org.apache.kafka.connect.converters.ShortConverter: 데이터를 Short 형식으로 변환합니다.org.apache.kafka.connect.converters.BooleanConverter: 데이터를 불리언 형식으로 변환합니다.io.confluent.connect.avro.AvroConverter: 데이터를 Apache Avro 형식으로 변환합니다.
이 출시에서는 Kafka Connect가 스키마 레지스트리를 사용하여 원격 스키마에 대한 유효성 검사를 지원하지 않습니다.
각 커넥터의 기본 변환기에 관한 자세한 내용은 특정 커넥터의 문서를 참고하세요.
기본 변환기 구성
지원되는 모든 커넥터의 기본 키 및 값 변환기는 org.apache.kafka.connect.json.JsonConverter입니다.
커넥터를 구성할 때는 Kafka 메시지의 키와 값에 적합한 변환기를 지정해야 합니다. 예를 들어 JSON 데이터로 작업하는 경우 JsonConverter를 사용합니다. 데이터가 문자열 형식인 경우 StringConverter을 사용합니다.
일반적인 구성은 다음과 같습니다.
tasks.max: 이 커넥터에 대해 만들 최대 태스크 수입니다. 커넥터의 병렬 처리를 제어합니다. 태스크 수를 늘리면 처리량이 향상될 수 있지만 리소스 소비(CPU 및 메모리)도 증가합니다. 최적의 값은 워크로드와 Connect 클러스터 작업자에게 할당된 리소스, 싱크 커넥터의 경우 Kafka 주제 파티션 수에 따라 달라집니다.value.converter: 메시지를 Cloud Storage 버킷으로 보내기 전에 메시지의 값을 직렬화하는 데 사용할 변환기입니다. 일반적인 변환기는 다음과 같습니다.org.apache.kafka.connect.json.JsonConverter: JSON 데이터의 경우 스키마 없이 일반 JSON과 함께 이 변환기를 사용하는 경우value.converter.schemas.enable=false를 설정해야 하는 경우가 많습니다.org.apache.kafka.connect.converters.ByteArrayConverter: 두 시스템에서 메시지의 정확한 콘텐츠를 유지합니다.org.apache.kafka.connect.storage.StringConverter: 일반 텍스트 문자열의 경우
key.converter: 메시지의 키를 직렬화하는 데 사용할 변환기입니다.value.converter와 동일한 변환기 옵션이 적용됩니다. 메시지에 키가 없는 경우org.apache.kafka.connect.storage.StringConverter을 사용할 수 있습니다.value.converter.schemas.enable: 싱크 커넥터의 경우org.apache.kafka.connect.json.JsonConverter를 사용할 때 이를true로 설정하면 Kafka Connect가 수신되는 Kafka 메시지 내에 삽입된 스키마를 찾아 사용하도록 지시합니다.false(기본값)로 설정하면 Kafka Connect는 삽입된 스키마가 없는 일반 JSON 데이터를 예상합니다.
변환 (선택사항)
변환을 사용하면 데이터 파이프라인 중에 데이터를 조작하거나 보강할 수 있습니다. 변환을 사용하면 Managed Service for Apache Kafka (소스 커넥터의 경우) 또는 외부 시스템 (싱크 커넥터의 경우)으로 전송되기 전에 개별 메시지를 수정할 수 있습니다. 변환을 사용하여 민감한 데이터를 마스킹하거나, 타임스탬프를 추가하거나, 필드 이름을 바꿀 수 있습니다.
프레디케이트 (선택사항)
프레디케이트를 사용하면 특정 조건에 따라 데이터를 필터링할 수 있습니다. 변환을 적용하기 위한 필터 역할을 하는 조건자는 메시지 속성에 따라 변환이 적용되는 메시지를 결정합니다.
Google Cloud내에서 Kafka Connect 관리
Kafka Connect를 사용하면 Google Cloud기본 인프라와 운영 복잡성을 처리하는 동안 커넥터 배포에 집중할 수 있습니다. Google Cloud 에서 자동화하는 항목과 구성할 수 있는 항목은 다음과 같습니다.
Kafka Connect 서비스는 다음을 자동화합니다.
Kafka Connect 작업자 프로비저닝: Connect 클러스터를 만들면 Kafka Connect 서비스가 Kubernetes에서 작업자 클러스터를 자동으로 프로비저닝합니다.
네트워킹: Kafka Connect 서비스는 작업자, Apache Kafka용 관리형 서비스 브로커, 외부 시스템 간의 통신을 지원하도록 네트워크를 구성합니다. 경우에 따라 기존 네트워크 설정을 일부 변경해야 할 수 있습니다.
영역 복원력: Kafka Connect 서비스는 최소 3개 영역에 워커를 분산하여 영역 서비스 중단 시 데이터 처리가 계속 진행되도록 합니다.
인증: Kafka Connect 서비스는 Kafka 브로커와의 인증도 구성하여 보안 연결을 보장합니다.
출시 및 업그레이드: Kafka Connect 서비스는 작업자 구성 변경사항, 버전 업그레이드, 보안 패치를 관리하여 배포가 항상 최신 상태로 유지되도록 합니다.
Kafka Connect 서비스 내에서 다음 구성을 실행할 수 있습니다.
용량 및 네트워크 제약 조건: 성능과 비용을 최적화하기 위해 리소스 한도와 네트워크 구성을 정의합니다.
모니터링 및 로깅: 커넥터의 로그 및 측정항목에 액세스하여 성능을 모니터링하고 문제를 해결합니다.
커넥터 수명 주기 관리: 필요에 따라 커넥터를 일시중지, 재개, 다시 시작 또는 중지하여 데이터 파이프라인을 관리합니다.
제한사항
Kafka Connect 서비스는 Managed Service for Apache Kafka 클러스터만 기본 Kafka 클러스터로 지원합니다. 기본 클러스터는 Kafka Connect 클러스터가 메타데이터를 쓰는 클러스터입니다.
이 서비스는 Kafka Connect 클러스터에 맞춤 커넥터 플러그인을 업로드하는 것을 지원하지 않습니다.