Menggunakan Spring Kafka dengan Azure Event Hubs untuk Kafka API

Tutorial ini menunjukkan kepada Anda cara mengonfigurasi Spring Cloud Stream Binder berbasis Java untuk menggunakan Azure Event Hubs for Kafka untuk mengirim dan menerima pesan dengan Azure Event Hubs. Untuk informasi selengkapnya, lihat Menggunakan Azure Event Hubs dari aplikasi Apache Kafka

Dalam tutorial ini, kita akan menyertakan dua metode autentikasi: autentikasi Microsoft Entra dan autentikasi Tanda Tangan Akses Bersama (SAS). Tab Tanpa Kata Sandi memperlihatkan autentikasi Microsoft Entra dan tab string Koneksi ion memperlihatkan autentikasi SAS.

Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Event Hubs for Kafka menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lain di lokasi pusat, yang menyederhanakan manajemen izin.

Autentikasi SAS menggunakan string koneksi namespace Azure Event Hubs Anda untuk akses yang didelegasikan ke Azure Event Hubs for Kafka. Jika Anda memilih untuk menggunakan Tanda Tangan Akses Bersama sebagai kredensial, Anda perlu mengelola string koneksi sendiri.

Prasyarat

Penting

Spring Boot versi 2.5 atau yang lebih tinggi diperlukan untuk menyelesaikan langkah-langkah dalam tutorial ini.

Menyiapkan kredensial

Azure Event Hubs mendukung penggunaan ID Microsoft Entra untuk mengotorisasi permintaan ke sumber daya Azure Event Hubs. Dengan MICROSOFT Entra ID, Anda dapat menggunakan kontrol akses berbasis peran Azure (Azure RBAC) untuk memberikan izin kepada prinsip keamanan, yang mungkin merupakan pengguna atau perwakilan layanan aplikasi.

Jika Anda ingin menjalankan sampel ini secara lokal dengan autentikasi Microsoft Entra, pastikan akun pengguna Anda telah mengautentikasi melalui Azure Toolkit untuk IntelliJ, plugin Akun Azure Visual Studio Code, atau Azure CLI. Selain itu, pastikan akun telah diberikan izin yang memadai.

Catatan

Saat menggunakan koneksi tanpa kata sandi, Anda perlu memberikan akses akun Anda ke sumber daya. Di Azure Event Hubs, tetapkan Azure Event Hubs Data Receiver peran dan Azure Event Hubs Data Sender ke akun Microsoft Entra yang saat ini Anda gunakan. Untuk informasi selengkapnya tentang memberikan peran akses, lihat Menetapkan peran Azure menggunakan portal Azure dan Mengotorisasi akses ke sumber daya Azure Event Hubs menggunakan ID Microsoft Entra.

Mengirim dan menerima pesan dari Azure Event Hubs

Dengan azure Event hub, Anda dapat mengirim dan menerima pesan menggunakan Spring Cloud Azure.

Untuk menginstal modul Spring Cloud Azure Starter, tambahkan dependensi berikut ke file pom.xml Anda:

  • Spring Cloud Azure Bill of Materials (BOM):

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

    Catatan

    Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi ke spring-cloud-azure-dependencies4.17.0. Bill of Material (BOM) ini harus dikonfigurasi di bagian <dependencyManagement> file pom.xml Anda. Ini memastikan bahwa semua dependensi Spring Cloud Azure menggunakan versi yang sama. Untuk informasi selengkapnya tentang versi yang digunakan untuk BOM ini, lihat Versi Spring Cloud Azure mana yang Harus Saya Gunakan.

  • Artefak Spring Cloud Azure Starter:

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

Kodekan aplikasi

Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi Anda untuk menghasilkan dan menggunakan pesan menggunakan Azure Event Hubs.

  1. Konfigurasikan info masuk Pusat aktivitas dengan menambahkan properti berikut ke file application.properties Anda.

    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}
    

    Tip

    Jika Anda menggunakan versi spring-cloud-azure-dependencies:4.3.0, maka Anda harus menambahkan properti spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources dengan nilai com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.

    Karena 4.4.0, properti ini akan ditambahkan secara otomatis, jadi tidak perlu menambahkannya secara manual.

    Tabel berikut ini menjelaskan bidang dalam konfigurasi:

    Bidang Deskripsi
    spring.cloud.stream.kafka.binder.brokers Menentukan titik akhir Azure Event Hubs.
    spring.cloud.stream.bindings.consume-in-0.destination Menentukan hub peristiwa tujuan input, yang untuk tutorial ini adalah hub yang Anda buat sebelumnya.
    spring.cloud.stream.bindings.consume-in-0.group Menentukan Grup Konsumen dari Azure Event Hubs, yang dapat Anda atur $Default untuk menggunakan grup konsumen dasar yang dibuat saat Anda membuat instans Azure Event Hubs.
    spring.cloud.stream.bindings.supply-out-0.destination Menentukan hub peristiwa tujuan output, yang untuk tutorial ini sama dengan tujuan input.

    Catatan

    Jika Anda mengaktifkan pembuatan topik otomatis, pastikan untuk menambahkan item spring.cloud.stream.kafka.binder.replicationFactorkonfigurasi , dengan nilai diatur ke setidaknya 1. Untuk informasi selengkapnya, lihat Panduan Referensi Binder Spring Cloud Stream Kafka.

  2. Edit file kelas startup untuk menampilkan konten berikut.

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

    Tip

    Dalam tutorial ini, tidak ada operasi autentikasi dalam konfigurasi atau kode. Namun, menyambungkan ke layanan Azure memerlukan autentikasi. Untuk menyelesaikan autentikasi, Anda perlu menggunakan Azure Identity. Spring Cloud Azure menggunakan DefaultAzureCredential, yang disediakan pustaka Azure Identity untuk membantu Anda mendapatkan kredensial tanpa perubahan kode apa pun.

    DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode mana yang akan digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (seperti lingkungan lokal dan produksi) tanpa menerapkan kode khusus lingkungan. Untuk informasi selengkapnya, lihat DefaultAzureCredential.

    Untuk menyelesaikan autentikasi di lingkungan pengembangan lokal, Anda dapat menggunakan Azure CLI, Visual Studio Code, PowerShell, atau metode lainnya. Untuk informasi selengkapnya, lihat Autentikasi Azure di lingkungan pengembangan Java. Untuk menyelesaikan autentikasi di lingkungan hosting Azure, sebaiknya gunakan identitas terkelola yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat Apa yang dimaksud dengan identitas terkelola untuk sumber daya Azure?

  3. Mulai aplikasi. Pesan seperti contoh berikut akan diposting di log aplikasi Anda:

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

Sebarkan ke Azure Spring Apps

Sekarang setelah Anda memiliki aplikasi Spring Boot yang berjalan secara lokal, saatnya untuk memindahkannya ke produksi. Azure Spring Apps memudahkan penyebaran aplikasi Spring Boot ke Azure tanpa perubahan kode apa pun. Layanan ini mengelola infrastruktur aplikasi Spring sehingga pengembang dapat fokus pada kode mereka. Azure Spring Apps menyediakan manajemen siklus hidup menggunakan pemantauan dan diagnostik yang komprehensif, manajemen konfigurasi, penemuan layanan, integrasi CI/CD, penyebaran biru-hijau, dan banyak lagi. Untuk menyebarkan aplikasi Anda ke Azure Spring Apps, lihat Menyebarkan aplikasi pertama Anda ke Azure Spring Apps.

Langkah berikutnya