Định cấu hình và sử dụng Apache Kafka với Spring Boot

May 13 2023
Kafka với chiếc ủng lò xo
Giới thiệu Apache Kafka là một nền tảng phát trực tuyến phân tán mã nguồn mở, xử lý luồng dữ liệu thời gian thực quy mô lớn, thông lượng cao, có khả năng chịu lỗi. Hệ thống này dựa trên mô hình đăng ký xuất bản trong đó nhà sản xuất xuất bản tin nhắn cho các chủ đề và người tiêu dùng đăng ký các chủ đề đó để sử dụng tin nhắn.
nguồn hình ảnh

Giới thiệu

Apache Kafka là một nền tảng phát trực tuyến phân tán mã nguồn mở xử lý việc truyền dữ liệu theo thời gian thực ở quy mô lớn, thông lượng cao, có khả năng chịu lỗi. Hệ thống này dựa trên mô hình đăng ký xuất bản trong đó nhà sản xuất xuất bản tin nhắn cho các chủ đề và người tiêu dùng đăng ký các chủ đề đó để sử dụng tin nhắn. Trường hợp sử dụng Apache Kafka được thấy trong các tình huống như phân tích thời gian thực, kiến ​​trúc hướng sự kiện, tổng hợp nhật ký, hệ thống nhắn tin và xây dựng đường dẫn dữ liệu có thể mở rộng.

Cách sử dụng tài liệu này:

Bạn có thể sử dụng tài liệu này để định cấu hình và sử dụng Apache Kafka để tạo và sử dụng thông báo (nội dung JSON) trong Ứng dụng khởi động mùa xuân của bạn.

điều kiện tiên quyết

Bạn cần hiểu rõ về Java, spring-boot, Apache Kafka, maven hoặc Gradle trước khi xem qua tài liệu này, nếu không chúng tôi sẽ đề nghị bạn kiểm tra tài liệu và hướng dẫn chính thức của họ.

Cài đặt

Trước khi tạo thông báo cho các chủ đề Kafka, bạn phải hoàn thành một số bước để định cấu hình các phụ thuộc bắt buộc trong tệp pom.xml(Maven) hoặc build.gradle(Dự án Gradle)

Đối với Maven:

For Gradle 
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.kafka</groupId>
   <artifactId>spring-kafka</artifactId>
</dependency>

implementation ‘org.springframework.boot:spring-boot-starter’
implementation ‘org.springframework.kafka:spring-kafka’

Cấu hình

Định cấu hình các thuộc tính Kafka cho tệp Application.properties, bạn cũng có thể có các thuộc tính tùy chỉnh của mình. Chỉ định máy chủ bootstrap của máy chủ Kafka và bất kỳ thuộc tính cấu hình bổ sung nào bạn cần, chẳng hạn như ID nhóm người tiêu dùng.

Ứng dụng.properties

spring.kafka.bootstrap-servers=<kafka-bootstrap-servers> 
spring.kafka.consumer.group-id=<consumer-group-id>
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=<topic-name>


spring.kafka.bootstrap-servers=localhost:9092 
spring.kafka.consumer.group-id=group_category
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=my-topic

Nhà sản xuất Kafka là một thành phần gửi tin nhắn đến các chủ đề Kafka. Nó xuất bản dữ liệu lên Kafka, sau đó một hoặc nhiều người tiêu dùng Kafka có thể sử dụng.

Để tạo nhà sản xuất Kafka, bạn cần thực hiện các bước sau:

  1. Định cấu hình thuộc tính của nhà sản xuất Kafka: Thiết lập các thuộc tính cấu hình cần thiết cho nhà sản xuất Kafka, chẳng hạn như máy chủ bootstrap (địa chỉ của nhà môi giới Kafka) và cài đặt tuần tự hóa. Điều này chúng tôi đã thực hiện trong bước cuối cùng.
  2. Tạo nhà sản xuất Kafka: Để gửi tin nhắn tới Kafka; bạn có thể sử dụng mẫu do Spring Kafka cung cấp. Đây là một ví dụ về một nhà sản xuất đơn giản:
  3. import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.kafka.core.KafkaTemplate;
    import org.springframework.stereotype.Service;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Component
    public class KafkaEventProducer {
     
     private static final Logger logger = LoggerFactory.getLogger(KafkaEventProducer.class);
     
     @Autowired
     private KafkaTemplate<String, String> kafkaTemplate;
     
     public void sendMessage(String topic, String message) {
       logger.info("Producing message [{}]", message);
       kafkaTemplate.send(topic, message);
     }
    }
    

  4. Định cấu hình thuộc tính của nhà sản xuất Kafka: Định cấu hình thuộc tính Kafka trong tệp application.properties của bạn. Chỉ định máy chủ bootstrap của máy chủ Kafka và bất kỳ thuộc tính cấu hình bổ sung nào bạn cần cho người tiêu dùng.
  5. Tạo trình lắng nghe người tiêu dùng Kafka: Triển khai một phương thức trong ứng dụng của bạn sẽ được gọi bất cứ khi nào nhận được tin nhắn mới từ Kafka. Sử dụng chú thích kafkaListener do Spring Kafka cung cấp.
  6. import org.springframework.kafka.annotation.KafkaListener;
    import org.springframework.stereotype.Component;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Component
    public class KafkaEventConsumer {
    
    private static final Logger logger = LoggerFactory.getLogger(KafkaEventConsumer.class);
    
    @KafkaListener(topics = “<topic-name>”, groupId = “<consumer-group-id>”)
     public void consumeMessage(String message) {
      //Use log
     log.info("Consumed message [{}]", message);
     }
    }
    
    

    @KafkaListener(topics = “${spring.kafka.app.topic}”,groupId= “${spring.kafka.consumer.group-id}”)
    

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {

 @Autowired
 private KafkaEventProducer kafkaEventProducer;

 public static void main(String[] args) {
   SpringApplication.run(MainApplication.class, args);
 }
 
 public void YourMethod() {
 // Send a message using the Kafka producer
 kafkaEventProducer.sendMessage(“<topic-name>”, “Oh Kafka Boy How'z Everything?”);
 }
}

Phần kết luận

Tóm lại, Spring Boot cung cấp hỗ trợ tuyệt vời để tích hợp Apache Kafka vào các ứng dụng của bạn. Với sự hỗ trợ Kafka của Spring Boot, bạn có thể dễ dàng tạo các nhà sản xuất và người tiêu dùng Kafka, định cấu hình các thuộc tính Kafka và xử lý quá trình xử lý thông báo.
Sự tích hợp của Spring Boot với Kafka giúp đơn giản hóa việc phát triển các ứng dụng dựa trên Kafka, cung cấp mức độ trừu tượng cao hơn và giảm số lượng mã soạn sẵn cần thiết.

Và trước khi chạy mã, vui lòng đảm bảo rằng máy chủ Kafka đang chạy và các chủ đề đã được tạo.

Lưu ý: Hãy nhớ tham khảo tài liệu chính thức của Spring Kafka và khám phá các mẫu Spring Kafka để hiểu rõ hơn về các tính năng và tùy chọn khác nhau có sẵn để tích hợp Kafka trong Spring Boot.

Cảm ơn!