Java 프로듀서 애플리케이션 개발

애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 Apache Kafka용 관리형 서비스 클러스터로 인증하는 Java 프로듀서 애플리케이션을 개발하는 방법을 알아봅니다. ADC를 사용하면 Google Cloud 에서 실행되는 애플리케이션이 Google Cloud 서비스에 인증하기 위한 올바른 사용자 인증 정보를 자동으로 찾아 사용할 수 있습니다.

시작하기 전에

이 튜토리얼을 시작하기 전에 Apache Kafka용 관리형 서비스 클러스터를 새로 만드세요. 클러스터가 이미 있으면 이 단계를 건너뛸 수 있습니다.

클러스터를 만드는 방법

콘솔

  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).

지원되는 위치에 대한 자세한 내용은 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 항목이 포함됩니다. 자세한 내용은 클러스터 생성 작업 모니터링을 참고하세요.

필요한 역할

클라이언트 VM을 만들고 구성하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

클라이언트 VM 만들기

Kafka 클러스터에 액세스할 수 있는 Compute Engine의 Linux 가상 머신 (VM) 인스턴스를 만듭니다. VM을 구성할 때 다음 옵션을 설정합니다.

  • Region 사용). Kafka 클러스터와 동일한 리전에 VM을 만듭니다.

  • 서브넷. Kafka 클러스터 구성에서 사용한 서브넷과 동일한 VPC 네트워크에 VM을 만듭니다. 자세한 내용은 클러스터의 서브넷 보기를 참고하세요.

  • 액세스 범위 VM에 https://www.googleapis.com/auth/cloud-platform 액세스 범위를 할당합니다. 이 범위는 VM이 관리형 Kafka API에 요청을 보낼 수 있도록 승인합니다.

다음 단계에서는 이러한 옵션을 설정하는 방법을 보여줍니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기

  2. 머신 구성 창에서 다음을 수행합니다.

    1. 이름 필드에 인스턴스 이름을 지정합니다. 자세한 내용은 리소스 이름 지정 규칙을 참조하세요.

    2. 리전 목록에서 Kafka 클러스터와 동일한 리전을 선택합니다.

    3. 영역 목록에서 영역을 선택합니다.

  3. 탐색 메뉴에서 네트워킹을 클릭합니다. 네트워킹 창이 표시되면 다음을 수행합니다.

    1. 네트워크 인터페이스 섹션으로 이동합니다.

    2. 기본 네트워크 인터페이스를 펼치려면 화살표를 클릭합니다.

    3. 네트워크 필드에서 VPC 네트워크를 선택합니다.

    4. 서브네트워크 목록에서 서브넷을 선택합니다.

    5. 완료를 클릭합니다.

  4. 탐색 메뉴에서 보안을 클릭합니다. 보안 창이 표시되면 다음을 수행합니다.

    1. 액세스 범위에서 각 API에 액세스 설정을 선택합니다.

    2. 액세스 범위 목록에서 Cloud Platform 드롭다운 목록을 찾아 사용 설정됨을 선택합니다.

  5. 만들기를 클릭하여 VM을 만듭니다.

gcloud

VM 인스턴스를 만들려면 gcloud compute instances create 명령어를 사용합니다.

gcloud compute instances create VM_NAME \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET \
  --zone=ZONE

다음을 바꿉니다.

  • VM_NAME: VM의 이름
  • PROJECT_ID: 프로젝트 ID입니다.
  • REGION: Kafka 클러스터를 만든 리전입니다(예: us-central1).
  • SUBNET: 클러스터 구성에서 사용한 서브넷과 동일한 VPC 네트워크의 서브넷
  • ZONE: 클러스터를 만든 리전의 영역(예: us-central1-c)

VM 만들기에 대한 자세한 내용은 특정 서브넷에 VM 인스턴스 만들기를 참고하세요.

IAM 역할 부여

Compute Engine 기본 서비스 계정에 다음 Identity and Access Management (IAM) 역할을 부여합니다.

  • 관리형 Kafka 클라이언트 (roles/managedkafka.client)
  • 서비스 계정 토큰 생성자 (roles/iam.serviceAccountTokenCreator)
  • 서비스 계정 OpenID 토큰 생성자 (roles/iam.serviceAccountOpenIdTokenCreator)

콘솔

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

    IAM으로 이동

  2. Compute Engine 기본 서비스 계정 행을 찾아 주 구성원 수정을 클릭합니다.

  3. 다른 역할 추가를 클릭하고 관리형 Kafka 클라이언트 역할을 선택합니다. 서비스 계정 토큰 생성자서비스 계정 OpenID 토큰 생성자 역할에 대해 이 단계를 반복합니다.

  4. 저장을 클릭합니다.

gcloud

IAM 역할을 부여하려면 gcloud projects add-iam-policy-binding 명령어를 사용합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role=roles/managedkafka.client

gcloud projects add-iam-policy-binding PROJECT_ID\
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role=roles/iam.serviceAccountTokenCreator

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role=roles/iam.serviceAccountOpenIdTokenCreator

다음을 바꿉니다.

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

  • PROJECT_NUMBER: 프로젝트 번호

프로젝트 번호를 가져오려면 gcloud projects describe 명령어를 실행합니다.

gcloud projects describe PROJECT_ID

자세한 내용은 프로젝트 이름, 번호, ID 찾기를 참고하세요.

VM에 연결

SSH를 사용하여 VM 인스턴스에 연결합니다.

콘솔

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. VM 인스턴스 목록에서 VM 이름을 찾아 SSH를 클릭합니다.

gcloud

VM에 연결하려면 gcloud compute ssh 명령어를 사용합니다.

gcloud compute ssh VM_NAME \
  --project=PROJECT_ID \
  --zone=ZONE

다음을 바꿉니다.

  • VM_NAME: VM의 이름
  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM을 만든 영역

SSH를 처음 사용하는 경우 추가 구성이 필요할 수 있습니다. 자세한 내용은 SSH 연결 정보를 참고하세요.

Apache Maven 프로젝트 설정

SSH 세션에서 다음 명령어를 실행하여 Maven 프로젝트를 설정합니다.

  1. sudo apt-get install maven openjdk-17-jdk 명령어를 사용하여 Java 및 Maven을 설치합니다.

  2. Apache Maven 프로젝트를 설정합니다.

    이 명령어는 demo이라는 디렉터리에 com.google.example 패키지를 만듭니다.

    mvn archetype:generate -DartifactId=demo -DgroupId=com.google.example\
       -DarchetypeArtifactId=maven-archetype-quickstart\
       -DarchetypeVersion=1.5 -DinteractiveMode=false
    
  3. cd demo를 사용하여 프로젝트 디렉터리로 변경합니다.

Java 프로듀서 애플리케이션 만들기

이 섹션에서는 Kafka 주제에 메시지를 생성하는 Java 애플리케이션을 만드는 방법을 안내합니다. Maven을 사용하여 Java 코드를 작성하고 컴파일하고, kafka-client.properties 파일에서 필요한 매개변수를 구성한 다음, 애플리케이션을 실행하여 메시지를 보냅니다.

프로듀서 코드 작성

src/main/java/com/google/example/App.java의 코드를 다음으로 바꿉니다.

  package com.google.example;

  import java.util.Properties;
  import org.apache.kafka.clients.producer.KafkaProducer;
  import org.apache.kafka.clients.producer.ProducerRecord;
  import org.apache.kafka.clients.producer.RecordMetadata;
  import org.apache.kafka.clients.producer.Callback;


  class SendCallback implements Callback {
          public void onCompletion(RecordMetadata m, Exception e){
              if (e == null){
                System.out.println("Produced a message successfully.");
              } else {
                System.out.println(e.getMessage());
              }
          }
  }

  public class App {
      public static void main(String[] args) throws Exception {
          Properties p = new Properties();
          p.load(new java.io.FileReader("kafka-client.properties"));

          KafkaProducer producer = new KafkaProducer(p);
          ProducerRecord message = new ProducerRecord("topicName", "key", "value");
          SendCallback callback = new SendCallback();
          producer.send(message,callback);
          producer.close();
      }
  }

애플리케이션 컴파일

이 애플리케이션을 컴파일하려면 일반적으로 Kafka 클라이언트와 관련된 패키지와 Google Cloud에 특정한 인증 로직이 필요합니다.

  1. 데모 프로젝트 디렉터리에는 이 프로젝트의 Maven 구성이 포함된 pom.xml이 있습니다. pom.xml.<dependencies> 섹션에 다음 줄을 추가합니다.

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>3.7.2</version>
    </dependency>
    <dependency>
        <groupId>com.google.cloud.hosted.kafka</groupId>
        <artifactId>managed-kafka-auth-login-handler</artifactId>
        <version>1.0.5</version>
    </dependency>
    
  2. mvn compile로 애플리케이션을 컴파일합니다.

애플리케이션 구성 및 실행

  1. 프로듀서는 kafka-client.properties이라는 파일에 클라이언트 구성 매개변수가 있을 것으로 예상합니다. 데모 프로젝트 디렉터리(pom.xml가 포함된 디렉터리)에 다음 콘텐츠로 이 파일을 만듭니다.

    bootstrap.servers=bootstrap.CLUSTER_ID.REGION.managedkafka.PROJECT_ID.cloud.goog:9092
    value.serializer=org.apache.kafka.common.serialization.StringSerializer
    key.serializer=org.apache.kafka.common.serialization.StringSerializer
    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
    
  2. 이제 애플리케이션을 실행할 수 있습니다.

    mvn exec:java -Dexec.mainClass="com.google.example.App" --quiet
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

콘솔

  1. VM 인스턴스 삭제

    1. VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스로 이동

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

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

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

      클러스터로 이동

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

gcloud

  1. VM을 삭제하려면 gcloud compute instances delete 명령어를 사용합니다.

    gcloud compute instances delete VM_NAME --zone=ZONE
    
  2. Kafka 클러스터를 삭제하려면 gcloud managed-kafka clusters delete 명령어를 사용합니다.

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

다음 단계

Apache Kafka®는 미국 및/또는 다른 국가에서 사용되는 Apache Software Foundation 또는 해당 계열사의 등록 상표입니다.