Uso de Spring Kafka con Azure Event Hubs para la API de Kafka

En este tutorial se muestra cómo configurar un enlazador de flujos de Spring Cloud basado en Java para usar Azure Event Hubs para Kafka para enviar y recibir mensajes con Azure Event Hubs. Para más información, consulte Uso de Azure Event Hubs desde aplicaciones de Apache Kafka.

En este tutorial, incluiremos dos métodos de autenticación: Autenticación de Microsoft Entra y Autenticación de firmas de acceso compartido (SAS). La pestaña Passwordless muestra la autenticación Microsoft Entra y la pestaña Connection string muestra la autenticación SAS.

La autenticación de Microsoft Entra es un mecanismo para conectarse a Azure Event Hubs para Kafka utilizando identidades definidas en Microsoft Entra ID. Mediante la autenticación Microsoft Entra, puede administrar identidades de usuario de base de datos y otros servicios Microsoft en una ubicación central, lo que simplifica la administración de permisos.

La autenticación SAS utiliza la cadena de conexión del espacio de nombres de Azure Event Hubs para el acceso delegado a Event Hubs para Kafka. Si decide usar firmas de acceso compartido como credenciales, debe administrar el cadena de conexión usted mismo.

Requisitos previos

Importante

Se necesita Spring Boot versión 2.5 o superior para completar los pasos descritos en este tutorial.

Preparación de credenciales

Azure Event Hubs admite el uso de Microsoft Entra ID para autorizar solicitudes a recursos de Event Hubs. Mediante Microsoft Entra ID, puede usar Azure control de acceso basado en rol (Azure RBAC) para conceder permisos a una entidad de seguridad, que puede ser un usuario o una entidad de servicio de aplicación.

Si quiere ejecutar este ejemplo localmente con Microsoft Entra autenticación, asegúrese de que la cuenta de usuario se autentica a través de Azure Toolkit for IntelliJ, complemento de Visual Studio Code Azure cuenta o CLI de Azure. Además, asegúrese de que la cuenta tiene permisos suficientes.

Nota:

Al usar conexiones sin contraseña, debe conceder a su cuenta acceso a los recursos. En Azure Event Hubs, asigne los Azure Event Hubs Data Receiver roles y Azure Event Hubs Data Sender a la cuenta de Microsoft Entra que está usando actualmente. Para obtener más información sobre cómo conceder roles de acceso, consulte Assign Azure roles mediante el portal de Azure y Authorize access to Event Hubs resources using Microsoft Entra ID.

Enviar y recibir mensajes de Azure Event Hubs

Mediante el uso de un espacio de nombres de Azure Event Hubs, puede enviar y recibir mensajes mediante Spring Cloud Azure.

Para instalar el módulo Spring Cloud Azure Starter, agregue las siguientes dependencias al archivo pom.xml:

  • El Bill of Materials (BOM) de Spring Cloud Azure:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Nota:

    Si usa Spring Boot 4.0.x, establezca la spring-cloud-azure-dependencies versión 7.4.0en .

    Si usa Spring Boot 3.5.x, establezca la spring-cloud-azure-dependencies versión 6.5.0en .

    Si usa Spring Boot 3.1.x-3.5.x, asegúrese de establecer la versión de spring-cloud-azure-dependencies a 5.25.0.

    Si usa Spring Boot 2.x, asegúrese de establecer la versión de spring-cloud-azure-dependencies en 4.20.0.

    Esta lista de materiales (BOM) debe configurarse en la sección <dependencyManagement> del archivo pom.xml. Esto garantiza que todas las dependencias de Spring Cloud Azure usen la misma versión.

    Para obtener más información sobre la versión usada para este BOM, consulte Qué versión de Spring Cloud Azure debería usar.

  • El artefacto Spring Cloud Azure Starter:

    <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

Codificar la aplicación

Siga estos pasos para configurar la aplicación para generar y consumir mensajes mediante Azure Event Hubs.

  1. Configure las credenciales de Event Hubs agregando las siguientes propiedades al archivo application.properties .

    spring.cloud.stream.kafka.binder.brokers=${AZ_EVENTHUBS_NAMESPACE_NAME}.servicebus.windows.net:9093
    spring.cloud.function.definition=consume;supply
    spring.cloud.stream.bindings.consume-in-0.destination=${AZ_EVENTHUB_NAME}
    spring.cloud.stream.bindings.consume-in-0.group=$Default
    spring.cloud.stream.bindings.supply-out-0.destination=${AZ_EVENTHUB_NAME}
    

    Sugerencia

    Si usa la versión spring-cloud-azure-dependencies:4.3.0, agregue la propiedad spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources con el valor com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.

    Dado 4.4.0que , esta propiedad se agrega automáticamente, por lo que no es necesario agregarla manualmente.

    En la siguiente tabla se describen los campos de la configuración:

    Campo Descripción
    spring.cloud.stream.kafka.binder.brokers Especifica el punto de conexión de Azure Event Hubs.
    spring.cloud.stream.bindings.consume-in-0.destination Especifica el centro de eventos de destino de entrada, que para este tutorial es el centro que creó anteriormente.
    spring.cloud.stream.bindings.consume-in-0.group Especifica un grupo de consumidores de Azure Event Hubs. Establezca este valor en $Default para usar el grupo de consumidores básico que Azure Event Hubs crea al crear la instancia.
    spring.cloud.stream.bindings.supply-out-0.destination Especifica el centro de eventos de destino de salida, que en este tutorial es el mismo que el destino de entrada.

    Nota:

    Si habilita la creación automática de temas, asegúrese de agregar el elemento de configuración spring.cloud.stream.kafka.binder.replicationFactor, con el valor establecido en al menos 1. Para más información, consulte la guía de referencia del enlazador de Stream Kafka de Spring Cloud.

  2. Edite el archivo de clase de inicio para mostrar el siguiente contenido.

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.messaging.Message;
    import org.springframework.messaging.support.GenericMessage;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Sinks;
    import java.util.function.Consumer;
    import java.util.function.Supplier;
    
    @SpringBootApplication
    public class EventHubKafkaBinderApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaBinderApplication.class);
    
        private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer();
    
        public static void main(String[] args) {
            SpringApplication.run(EventHubKafkaBinderApplication.class, args);
        }
    
        @Bean
        public Supplier<Flux<Message<String>>> supply() {
            return ()->many.asFlux()
                           .doOnNext(m->LOGGER.info("Manually sending message {}", m))
                           .doOnError(t->LOGGER.error("Error encountered", t));
        }
    
        @Bean
        public Consumer<Message<String>> consume() {
            return message->LOGGER.info("New message received: '{}'", message.getPayload());
        }
    
        @Override
        public void run(String... args) {
            many.emitNext(new GenericMessage<>("Hello World"), Sinks.EmitFailureHandler.FAIL_FAST);
        }
    
    }
    

    Sugerencia

    En este tutorial, no hay ninguna operación de autenticación en las configuraciones ni en el código. Sin embargo, la conexión a Azure servicios requiere autenticación. Para completar la autenticación, debe usar Azure Identity. Spring Cloud Azure usa DefaultAzureCredential, que la biblioteca Azure Identity proporciona para ayudarle a obtener credenciales sin cambios en el código.

    DefaultAzureCredential admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos, como entornos locales o de producción, sin implementar código específico del entorno. Para obtener más información, vea DefaultAzureCredential.

    Para completar la autenticación en entornos de desarrollo local, puede usar CLI de Azure, Visual Studio Code, PowerShell u otros métodos. Para obtener más información, consulte la autenticación de Azure en los entornos de desarrollo de Java. Para completar la autenticación en Azure entornos de hospedaje, se recomienda usar la identidad administrada asignada por el usuario. Para obtener más información, consulte ¿Qué son las identidades administradas para los recursos de Azure?

  3. Inicie la aplicación. Los mensajes como el ejemplo siguiente se publican en el registro de la aplicación:

    Kafka version: 3.0.1
    Kafka commitId: 62abe01bee039651
    Kafka startTimeMs: 1622616433956
    New message received: 'Hello World'
    

Implementación en Azure Spring Apps

Ahora que tiene la aplicación Spring Boot que se ejecuta localmente, es el momento de moverla a producción. Azure Spring Apps facilita la implementación de aplicaciones de Spring Boot en Azure sin cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante supervisión y diagnósticos completos, administración de configuración, detección de servicios, integración de CI/CD, implementaciones azul-verde, etc. Para implementar la aplicación en Azure Spring Apps, consulte Implementación de la primera aplicación en Azure Spring Apps.

Pasos siguientes