Java-Producer-Anwendung entwickeln

Hier erfahren Sie, wie Sie eine Java-Producer-Anwendung entwickeln, die sich mit einem Managed Service for Apache Kafka-Cluster mithilfe von Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) authentifiziert. Mit ADC können Anwendungen, die auf Google Cloud ausgeführt werden, automatisch die richtigen Anmeldedaten für die Authentifizierung bei Google Cloud -Diensten finden und verwenden.

Hinweise

Bevor Sie mit dieser Anleitung beginnen, erstellen Sie einen neuen Managed Service for Apache Kafka-Cluster. Wenn Sie bereits einen Cluster haben, können Sie diesen Schritt überspringen.

Cluster erstellen

Console

  1. Rufen Sie die Seite Managed Service for Apache Kafka > Cluster auf.

    Zu den Clustern

  2. Klicken Sie auf Erstellen.
  3. Geben Sie in das Feld Clustername einen Namen für den Cluster ein.
  4. Wählen Sie in der Liste Region einen Standort für den Cluster aus.
  5. Konfigurieren Sie unter Netzwerkkonfiguration das Subnetz, in dem der Cluster zugänglich ist:
    1. Wählen Sie unter Projekt Ihr Projekt aus.
    2. Wählen Sie unter Netzwerk das VPC-Netzwerk aus.
    3. Wählen Sie das Subnetz für Subnetz aus.
    4. Klicken Sie auf Fertig.
  6. Klicken Sie auf Erstellen.

Nachdem Sie auf Erstellen geklickt haben, ist der Clusterstatus Creating. Wenn der Cluster bereit ist, lautet der Status Active.

gcloud

Führen Sie den Befehl managed-kafka clusters create aus, um einen Kafka-Cluster zu erstellen.

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

Ersetzen Sie Folgendes:

  • KAFKA_CLUSTER: ein Name für den Kafka-Cluster
  • REGION: Der Standort des Clusters
  • PROJECT_ID: Ihre Projekt-ID.
  • SUBNET_NAME: das Subnetz, in dem Sie den Cluster erstellen möchten, z. B. default

Informationen zu unterstützten Standorten finden Sie unter Managed Service for Apache Kafka-Standorte.

Der Befehl wird asynchron ausgeführt und gibt eine Vorgangs-ID zurück:

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

Verwenden Sie den Befehl gcloud managed-kafka operations describe, um den Fortschritt des Erstellungsvorgangs zu verfolgen:

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

Wenn der Cluster bereit ist, enthält die Ausgabe dieses Befehls den Eintrag state: ACTIVE. Weitere Informationen finden Sie unter Vorgang zum Erstellen von Clustern überwachen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Konfigurieren einer Client-VM benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Client-VM erstellen

Erstellen Sie eine Linux-VM-Instanz in Compute Engine, die auf den Kafka-Cluster zugreifen kann. Legen Sie beim Konfigurieren der VM die folgenden Optionen fest:

  • Region Erstellen Sie die VM in derselben Region wie Ihren Kafka-Cluster.

  • Subnetz Erstellen Sie die VM im selben VPC-Netzwerk wie das Subnetz, das Sie in der Konfiguration Ihres Kafka-Clusters verwendet haben. Weitere Informationen finden Sie unter Subnetze eines Clusters ansehen.

  • Zugriffsbereiche Weisen Sie der VM den https://www.googleapis.com/auth/cloud-platform-Zugriffsbereich zu. Mit diesem Bereich wird die VM autorisiert, Anfragen an die Managed Kafka API zu senden.

In den folgenden Schritten wird beschrieben, wie Sie diese Optionen festlegen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Instanz erstellen

  2. Führen Sie im Bereich Maschinenkonfiguration die folgenden Schritte aus:

    1. Geben Sie im Feld Name einen Namen für die Instanz an. Weitere Informationen finden Sie unter Namenskonvention für Ressourcen.

    2. Wählen Sie in der Liste Region dieselbe Region wie für Ihren Kafka-Cluster aus.

    3. Wählen Sie in der Liste Zone eine Zone aus.

  3. Klicken Sie im Navigationsmenü auf Netzwerk. Führen Sie im angezeigten Bereich Netzwerk die folgenden Schritte aus:

    1. Gehen Sie zum Abschnitt Netzwerkschnittstellen.

    2. Klicken Sie auf den Pfeil , um die Standardnetzwerkschnittstelle zu maximieren.

    3. Wählen Sie im Feld Netzwerk das VPC-Netzwerk aus.

    4. Wählen Sie in der Liste Subnetzwerk das Subnetzwerk aus.

    5. Klicken Sie auf Fertig.

  4. Klicken Sie im Navigationsmenü auf Sicherheit. Führen Sie im angezeigten Bereich Sicherheit die folgenden Schritte aus:

    1. Wählen Sie für Zugriffsbereiche die Option Zugriff für jede API festlegen aus.

    2. Suchen Sie in der Liste der Zugriffsbereiche nach der Drop-down-Liste Cloud Platform und wählen Sie Aktiviert aus.

  5. Klicken Sie auf Erstellen, um die VM zu erstellen.

gcloud

Verwenden Sie den Befehl gcloud compute instances create, um die VM-Instanz zu erstellen.

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

Ersetzen Sie Folgendes:

  • VM_NAME: der Name der VM
  • PROJECT_ID: Ihre Projekt-ID.
  • REGION: Die Region, in der Sie den Kafka-Cluster erstellt haben, z. B. us-central1
  • SUBNET: ein Subnetz im selben VPC-Netzwerk wie das Subnetz, das Sie in der Clusterkonfiguration verwendet haben
  • ZONE: Eine Zone in der Region, in der Sie den Cluster erstellt haben, z. B. us-central1-c

Weitere Informationen zum Erstellen einer VM finden Sie unter VM-Instanz in einem bestimmten Subnetz erstellen.

IAM-Rollen zuweisen

Weisen Sie dem standardmäßigen Compute Engine-Dienstkonto die folgenden IAM-Rollen (Identity and Access Management) zu:

  • Managed Kafka Client (roles/managedkafka.client)
  • Ersteller von Dienstkonto-Token (roles/iam.serviceAccountTokenCreator)
  • Ersteller von OpenID-Tokens für Dienstkonten (roles/iam.serviceAccountOpenIdTokenCreator)

Console

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  2. Suchen Sie die Zeile für das Compute Engine-Standarddienstkonto und klicken Sie auf Hauptkonto bearbeiten.

  3. Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie die Rolle Managed Kafka Client aus. Wiederholen Sie diesen Schritt für die Rollen Ersteller von Dienstkonto-Tokens und Ersteller von OpenID-Tokens für Dienstkonten.

  4. Klicken Sie auf Speichern.

gcloud

Verwenden Sie den Befehl gcloud projects add-iam-policy-binding, um IAM-Rollen zuzuweisen.

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.

  • PROJECT_NUMBER: Ihre Projektnummer

Führen Sie den Befehl gcloud projects describe aus, um die Projektnummer abzurufen:

gcloud projects describe PROJECT_ID

Weitere Informationen finden Sie unter Projektname, ‑nummer und ‑ID ermitteln.

Verbindung zur VM herstellen

Stellen Sie über SSH eine Verbindung zur VM-Instanz her.

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Suchen Sie in der Liste der VM-Instanzen nach dem VM-Namen und klicken Sie auf SSH.

gcloud

Verwenden Sie den Befehl gcloud compute ssh, um eine Verbindung zur VM herzustellen.

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

Ersetzen Sie Folgendes:

  • VM_NAME: der Name der VM
  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: die Zone, in der Sie die VM erstellt haben.

Bei der erstmaligen Verwendung von SSH ist möglicherweise eine zusätzliche Konfiguration erforderlich. Weitere Informationen finden Sie unter Informationen zu SSH-Verbindungen.

Apache Maven-Projekt einrichten

Führen Sie in Ihrer SSH-Sitzung die folgenden Befehle aus, um ein Maven-Projekt einzurichten.

  1. Installieren Sie Java und Maven mit dem Befehl: sudo apt-get install maven openjdk-17-jdk.

  2. Richten Sie ein Apache Maven-Projekt ein.

    Mit diesem Befehl wird ein Paket com.google.example in einem Verzeichnis mit dem Namen demo erstellt.

    mvn archetype:generate -DartifactId=demo -DgroupId=com.google.example\
       -DarchetypeArtifactId=maven-archetype-quickstart\
       -DarchetypeVersion=1.5 -DinteractiveMode=false
    
  3. Wechseln Sie mit cd demo in das Projektverzeichnis.

Java-Producer-Anwendung erstellen

In diesem Abschnitt erfahren Sie, wie Sie eine Java-Anwendung erstellen, die Nachrichten für ein Kafka-Thema erzeugt. Schreiben und kompilieren Sie Java-Code mit Maven, konfigurieren Sie die erforderlichen Parameter in einer kafka-client.properties-Datei und führen Sie dann Ihre Anwendung aus, um Nachrichten zu senden.

Producer-Code schreiben

Ersetzen Sie den Code in src/main/java/com/google/example/App.java durch Folgendes:

  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();
      }
  }

Anwendung kompilieren

Zum Kompilieren dieser Anwendung benötigen Sie Pakete, die sich allgemein auf Kafka-Clients beziehen, und Authentifizierungslogik, die spezifisch für Google Cloudist.

  1. Im Demoprojektverzeichnis finden Sie pom.xml mit Maven-Konfigurationen für dieses Projekt. Fügen Sie dem <dependencies>-Abschnitt von pom.xml. die folgenden Zeilen hinzu:

    <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. Kompilieren Sie die Anwendung mit mvn compile.

Anwendung konfigurieren und ausführen

  1. Der Producer erwartet Clientkonfigurationsparameter in einer Datei mit dem Namen kafka-client.properties. Erstellen Sie diese Datei im Demoprojektverzeichnis (dem Verzeichnis mit pom.xml) mit folgendem Inhalt:

    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. Jetzt können Sie die Anwendung ausführen:

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

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:

Console

  1. Löschen Sie die VM-Instanz.

    1. Rufen Sie die Seite VM-Instanzen auf.

      Zu Seite „VM-Instanzen“

    2. Wählen Sie die VM aus und klicken Sie auf Löschen.

  2. Löschen Sie den Kafka-Cluster.

    1. Rufen Sie die Seite Managed Service for Apache Kafka > Cluster auf.

      Zu den Clustern

    2. Wählen Sie den Kafka-Cluster aus und klicken Sie auf Löschen.

gcloud

  1. Verwenden Sie zum Löschen der VM den Befehl gcloud compute instances delete.

    gcloud compute instances delete VM_NAME --zone=ZONE
    
  2. Verwenden Sie den Befehl gcloud managed-kafka clusters delete, um den Kafka-Cluster zu löschen.

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

Nächste Schritte

Apache Kafka® ist eine eingetragene Marke der Apache Software Foundation oder deren Tochtergesellschaften in den USA und/oder anderen Ländern.