Pub/Sub 메시지를 Kafka에 복제

이 튜토리얼에서는 Kafka Connect를 사용하여 Pub/Sub에서 Managed Service for Apache Kafka 클러스터로 메시지를 수집하는 방법을 보여줍니다.

Kafka Connect는 Kafka 클러스터와 다른 시스템 간의 데이터 이동을 관리합니다. 이 튜토리얼에서는 클러스터 연결Pub/Sub 소스 커넥터를 만듭니다. Pub/Sub 소스 커넥터는 Pub/Sub 주제에서 메시지를 읽고 Kafka 주제에 씁니다.

시작하기 전에

콘솔

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. 프로젝트에 다음 역할이 있는지 확인합니다. 관리형 Kafka 클러스터 편집자, 관리형 Kafka Connect 클러스터 편집자, 관리형 Kafka 커넥터 편집자, 관리형 Kafka 주제 편집자, Pub/Sub 편집자

    역할 확인

    1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

      IAM으로 이동
    2. 프로젝트를 선택합니다.
    3. 주 구성원 열에서 나 또는 내가 속한 그룹을 식별하는 모든 행을 찾습니다. 내가 속한 그룹을 알아보려면 관리자에게 문의하세요.

    4. 나를 지정하거나 포함하는 모든 행의 역할 열을 확인하여 역할 목록에 필요한 역할이 포함되어 있는지 확인합니다.

    역할 부여

    1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

      IAM으로 이동
    2. 프로젝트를 선택합니다.
    3. 액세스 권한 부여를 클릭합니다.
    4. 새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.

    5. 역할 선택을 클릭한 후 역할을 검색합니다.
    6. 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
    7. 저장을 클릭합니다.

gcloud

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.

  3. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  4. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  5. Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트를 선택하거나 만드는 데 필요한 역할

    • 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
    • 프로젝트 만들기: 프로젝트를 만들려면 resourcemanager.projects.create 권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 생성한 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. Managed Kafka API를 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기

    gcloud services enable managedkafka.googleapis.com
  8. Google Cloud CLI를 설치합니다.

  9. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  10. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  11. Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트를 선택하거나 만드는 데 필요한 역할

    • 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
    • 프로젝트 만들기: 프로젝트를 만들려면 resourcemanager.projects.create 권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 생성한 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.

  12. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  13. Managed Kafka API를 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기

    gcloud services enable managedkafka.googleapis.com
  14. 사용자 계정에 역할을 부여합니다. 다음 IAM 역할마다 다음 명령어를 1회 실행합니다. roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor, roles/managedkafka.topicEditor, roles/pubsub.editor

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • USER_IDENTIFIER: 사용자 계정의 식별자입니다. 예를 들면 myemail@example.com입니다.
    • ROLE: 사용자 계정에 부여하는 IAM 역할입니다.

Pub/Sub 주제 및 구독 만들기

이 단계에서는 구독이 있는 Pub/Sub 주제를 만듭니다.

콘솔

  1. Pub/Sub > 주제 페이지로 이동합니다.

    주제로 이동

  2. 주제 만들기를 클릭합니다.

  3. 주제 ID 상자에 주제 이름을 입력합니다.

  4. 기본 구독 추가 체크박스가 선택되어 있는지 확인합니다.

  5. 만들기를 클릭합니다.

gcloud

  1. Pub/Sub 주제를 만들려면 gcloud pubsub topics create 명령어를 실행합니다.

    gcloud pubsub topics create TOPIC_ID
    

    TOPIC_ID을 Pub/Sub 주제의 이름으로 바꿉니다.

  2. 주제에 대한 구독을 만들려면 gcloud pubsub subscriptions create 명령어를 실행합니다.

    gcloud pubsub subscriptions create --topic TOPIC_ID SUBSCRIPTION_ID
    

    SUBSCRIPTION_ID을 Pub/Sub 구독 이름으로 바꿉니다.

Pub/Sub 주제 및 구독 이름 지정 방법은 주제 또는 구독 이름 지정 안내를 참고하세요.

Managed Service for Apache Kafka 리소스 만들기

이 섹션에서는 다음 Managed Service for Apache Kafka 리소스를 만듭니다.

  • 주제가 있는 Kafka 클러스터
  • Pub/Sub 커넥터가 있는 Connect 클러스터

Kafka 클러스터 만들기

이 단계에서는 Managed Service for Apache Kafka 클러스터를 만듭니다. 클러스터를 만드는 데 최대 30분이 걸릴 수 있습니다.

콘솔

  1. Managed Service for Apache Kafka > 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 만들기를 클릭합니다.
  3. 클러스터 이름 체크박스에 클러스터 이름을 입력합니다.
  4. 리전 목록에서 클러스터의 위치를 선택합니다.
  5. 네트워크 구성에서 클러스터에 액세스할 수 있는 서브넷을 구성합니다.
    1. 프로젝트에서 사용자 프로젝트를 선택합니다.
    2. 네트워크에서 VPC 네트워크를 선택합니다.
    3. 서브넷에서 서브넷을 선택합니다.
    4. 완료를 클릭합니다.
  6. 만들기를 클릭합니다.

만들기를 클릭하면 클러스터 상태가 Creating가 됩니다. 클러스터가 준비되면 상태는 Active입니다.

gcloud

Kafka 클러스터를 만들려면 managed-kafka clusters create 명령어를 실행합니다.

gcloud managed-kafka clusters create KAFKA_CLUSTER \
--location=REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
--async

다음을 바꿉니다.

  • KAFKA_CLUSTER: Kafka 클러스터의 이름
  • REGION: 클러스터의 위치
  • PROJECT_ID: 프로젝트 ID입니다.
  • SUBNET_NAME: 클러스터를 만들려는 서브넷입니다(예: default).

지원되는 위치에 대한 자세한 내용은 Managed Service for Apache Kafka 위치를 참고하세요.

이 명령어는 비동기적으로 실행되며 작업 ID를 반환합니다.

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

생성 작업의 진행 상황을 추적하려면 gcloud managed-kafka operations describe 명령어를 사용합니다.

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

클러스터가 준비되면 이 명령어의 출력에 state: ACTIVE 항목이 포함됩니다. 자세한 내용은 클러스터 생성 작업 모니터링을 참고하세요.

Kafka 주제 만들기

Managed Service for Apache Kafka 클러스터를 만든 후 Kafka 주제를 만듭니다.

콘솔

  1. Managed Service for Apache Kafka > 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 클러스터 이름을 클릭합니다.

  3. 클러스터 세부정보 페이지에서 주제 만들기를 클릭합니다.

  4. 주제 이름 체크박스에 주제 이름을 입력합니다.

  5. 만들기를 클릭합니다.

gcloud

Kafka 주제를 만들려면 managed-kafka topics create 명령어를 실행합니다.

gcloud managed-kafka topics create KAFKA_TOPIC_NAME \
--cluster=KAFKA_CLUSTER \
--location=REGION \
--partitions=10 \
--replication-factor=3

다음을 바꿉니다.

  • KAFKA_TOPIC_NAME: 만들 Kafka 주제의 이름입니다.
  • KAFKA_CLUSTER: Kafka 클러스터의 이름
  • REGION: Kafka 클러스터를 만든 리전

Connect 클러스터 만들기

이 단계에서는 Connect 클러스터를 만듭니다. Connect 클러스터를 만드는 데 최대 30분이 걸릴 수 있습니다.

이 단계를 시작하기 전에 Managed Service for Apache Kafka 클러스터가 완전히 생성되었는지 확인하세요.

콘솔

  1. Managed Service for Apache Kafka > 클러스터 연결 페이지로 이동합니다.

    클러스터 연결로 이동

  2. 만들기를 클릭합니다.

  3. Connect 클러스터 이름에 문자열을 입력합니다. 예를 들면 my-connect-cluster입니다.

  4. 기본 Kafka 클러스터에서 이전에 만든 Kafka를 선택합니다.

  5. 만들기를 클릭합니다.

클러스터가 생성되는 동안 클러스터 상태는 Creating입니다. 클러스터 생성이 완료되면 상태가 Active입니다.

gcloud

Connect 클러스터를 만들려면 gcloud managed-kafka connect-clusters create 명령어를 실행합니다.

gcloud managed-kafka connect-clusters create CONNECT_CLUSTER \
  --location=REGION \
  --cpu=12 \
  --memory=12GiB \
  --primary-subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
  --kafka-cluster=KAFKA_CLUSTER \
  --async

다음을 바꿉니다.

  • CONNECT_CLUSTER: Connect 클러스터의 이름
  • REGION: Kafka 클러스터를 만든 리전
  • PROJECT_ID: 프로젝트 ID입니다.
  • SUBNET_NAME: Kafka 클러스터를 만든 서브넷
  • KAFKA_CLUSTER: Kafka 클러스터의 이름

이 명령어는 비동기적으로 실행되며 작업 ID를 반환합니다.

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

생성 작업의 진행 상황을 추적하려면 gcloud managed-kafka operations describe 명령어를 사용합니다.

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

자세한 내용은 클러스터 생성 작업 모니터링을 참고하세요.

IAM 역할 부여

관리형 Kafka 서비스 계정에 다음 Identity and Access Management (IAM) 역할을 부여합니다.

  • Pub/Sub 구독자
  • Pub/Sub 뷰어

이러한 역할을 통해 커넥터가 Pub/Sub에서 메시지를 읽을 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. Google 제공 역할 부여 포함을 선택합니다.

  3. 관리형 Kafka 서비스 계정 행을 찾아 주 구성원 수정을 클릭합니다.

  4. 다른 역할 추가를 클릭하고 Pub/Sub 구독자 역할을 선택합니다. Pub/Sub 뷰어 역할에 대해 이 단계를 반복합니다.

  5. 저장을 클릭합니다.

역할 부여에 대한 자세한 내용은 콘솔을 사용하여 IAM 역할 부여를 참조하세요.

gcloud

서비스 계정에 IAM 역할을 부여하려면 gcloud projects add-iam-policy-binding 명령어를 실행합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
    --role=roles/pubsub.subscriber

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
    --role=roles/pubsub.viewer

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • PROJECT_NUMBER: 프로젝트 번호

프로젝트 번호를 찾으려면 gcloud projects describe 명령어를 사용합니다.

Pub/Sub 소스 커넥터 만들기

이 단계에서는 Pub/Sub 소스 커넥터를 만듭니다. 이 커넥터는 Pub/Sub에서 메시지를 읽고 Kafka 주제에 씁니다.

콘솔

  1. Managed Service for Apache Kafka > 클러스터 연결 페이지로 이동합니다.

    클러스터 연결로 이동

  2. Connect 클러스터 이름을 클릭합니다.

  3. 커넥터 만들기를 클릭합니다.

  4. 커넥터 이름에 문자열을 입력합니다. 예: pubsub-source

  5. 커넥터 플러그인 목록에서 Pub/Sub Source를 선택합니다.

  6. Cloud Pub/Sub 구독에서 Pub/Sub 주제를 만들 때 생성된 기본 Pub/Sub를 선택합니다.

  7. Kafka 주제에서 이전에 만든 Kafka 주제를 선택합니다.

  8. 만들기를 클릭합니다.

gcloud

Pub/Sub 소스 커넥터를 만들려면 gcloud managed-kafka connectors create 명령어를 실행합니다.

gcloud managed-kafka connectors create PUBSUB_CONNECTOR_NAME \
  --connect-cluster=CONNECT_CLUSTER \
  --location=REGION \
  --configs=connector.class=com.google.pubsub.kafka.source.CloudPubSubSourceConnector,\
cps.project=PROJECT_ID,\
cps.streamingPull.enabled=true,\
cps.subscription=SUBSCRIPTION_ID,\
kafka.topic=KAFKA_TOPIC_NAME,\
key.converter=org.apache.kafka.connect.storage.StringConverter,\
tasks.max=3,\
value.converter=org.apache.kafka.connect.converters.ByteArrayConverter

다음을 바꿉니다.

  • PUBSUB_CONNECTOR_NAME: 커넥터의 이름(예: pubsub-source-connector)
  • CONNECT_CLUSTER: Connect 클러스터의 이름
  • REGION: Connect 클러스터를 만든 리전
  • PROJECT_ID: 프로젝트 ID입니다.
  • KAFKA_TOPIC_NAME: Kafka 주제의 이름
  • SUBSCRIPTION_ID: Pub/Sub 구독 이름

결과 보기

결과를 보려면 Pub/Sub에 메시지를 게시하세요.

콘솔

  1. Google Cloud 콘솔에서 Pub/Sub > 주제 페이지로 이동합니다.

    주제로 이동

  2. 주제 목록에서 Pub/Sub 주제 이름을 클릭합니다.

  3. 메시지를 클릭합니다.

  4. 메시지 게시를 클릭합니다.

  5. 메시지 수10을 입력합니다.

  6. 메시지 본문{"name": "Alice", "customer_id": 1}을 입력합니다.

  7. 게시를 클릭합니다.

gcloud

Pub/Sub 주제에 메시지를 게시하려면 gcloud pubsub topics publish 명령어를 사용합니다.

for run in {1..10}; do
  gcloud pubsub topics publish TOPIC_ID --message='{"name": "Alice", "customer_id": 1}'
done

TOPIC_ID을 Pub/Sub 주제의 이름으로 바꿉니다.

이제 Kafka 주제에서 메시지를 사용할 수 있습니다. 자세한 내용은 CLI로 메시지 생성 및 사용을 참고하세요.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

콘솔

  1. Pub/Sub 주제를 삭제합니다.

    1. Pub/Sub > 주제 페이지로 이동합니다.

      주제로 이동

    2. 주제를 선택하고 삭제를 클릭합니다.

  2. Pub/Sub 구독을 삭제합니다.

    1. Pub/Sub > 구독 페이지로 이동합니다.

      구독 페이지로 이동

    2. 주제로 만든 구독을 선택하고 삭제를 클릭합니다.

  3. 연결 클러스터를 삭제합니다.

    1. Managed Service for Apache Kafka > 클러스터 연결 페이지로 이동합니다.

      클러스터 연결로 이동

    2. 연결 클러스터를 선택하고 삭제를 클릭합니다.

  4. Kafka 클러스터를 삭제합니다.

    1. Managed Service for Apache Kafka > 클러스터 페이지로 이동합니다.

      클러스터로 이동

    2. Kafka 클러스터를 선택하고 삭제를 클릭합니다.

gcloud

  1. Pub/Sub 구독 및 주제를 삭제하려면 gcloud pubsub subscriptions deletegcloud pubsub topics delete 명령어를 사용합니다.

    gcloud pubsub subscriptions delete SUBSCRIPTION_ID
    gcloud pubsub topics delete TOPIC_ID
    
  2. 연결 클러스터를 삭제하려면 gcloud managed-kafka connect-clusters delete 명령어를 사용합니다.

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=REGION --async
    
  3. Kafka 클러스터를 삭제하려면 gcloud managed-kafka clusters delete 명령어를 사용합니다.

    gcloud managed-kafka clusters delete KAFKA_CLUSTER \
      --location=REGION --async
    

다음 단계