TopDev

Tất tần tật Apache Kafka

seoyttop 📖 4 phút đọc 💬 1 phản hồi

Apache Kafka là một hệ thống phân phối dữ liệu mã nguồn mở được phát triển bởi Apache Software Foundation. Nó được thiết kế để xử lý các luồng dữ liệu lớn từ nhiều nguồn và cung cấp cơ chế đảm bảo tin cậy và hiệu suất cao.

Kafka thường được sử dụng như một hệ thống message broker hoặc dịch vụ gửi và nhận tin nhắn, cho phép các ứng dụng và dịch vụ trao đổi dữ liệu với nhau thông qua các topic (chủ đề). Dữ liệu trong Kafka được chia thành các message (tin nhắn) và lưu trữ trên các broker (máy chủ) thành các partition (phân vùng), mỗi partition có thể được repliacted (sao chép) trên nhiều broker để đảm bảo sự an toàn và sẵn sàng cao.

Apache Kafka thường được sử dụng trong các ứng dụng như xử lý sự kiện thời gian thực, truyền dữ liệu giữa các ứng dụng và hệ thống, giám sát hệ thống, và xây dựng các kiến trúc dữ liệu phân phối. Nó đã trở thành một phần quan trọng trong hệ sinh thái dữ liệu lớn và phân phối.

Dưới đây là một ví dụ đơn giản về cách sử dụng Java Kafka để tạo một producer (người sản xuất) và gửi một số tin nhắn đến một topic cụ thể trong Kafka.

Đầu tiên, bạn cần thêm thư viện Kafka vào dự án Java của mình. Bạn có thể thực hiện điều này bằng cách thêm dependency sau vào file pom.xml nếu bạn sử dụng Maven:

<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.0</version> <!-- Thay version tại đây bằng phiên bản mới nhất --> </dependency>

Sau đó, dưới đây là một ví dụ về cách tạo một producer và gửi một số tin nhắn đến Kafka:

` import org.apache.kafka.clients.producer.*;

import java.util.Properties;

public class KafkaProducerExample { public static void main(String[] args) { // Thiết lập các cấu hình cho producer Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // Thiết lập địa chỉ Kafka broker props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // Serializer cho key props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // Serializer cho value

    // Khởi tạo KafkaProducer với các cấu hình đã thiết lập
    Producer<String, String> producer = new KafkaProducer<>(props);

    // Tạo một message để gửi đến Kafka
    ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", "key", "Hello Kafka!");

    // Gửi message đến Kafka
    producer.send(record, new Callback() {
        public void onCompletion(RecordMetadata metadata, Exception e) {
            if (e != null) {
                e.printStackTrace();
            } else {
                System.out.println("Sent message: offset = " + metadata.offset() + ", partition = " + metadata.partition());
            }
        }
    });

    // Đóng producer khi đã gửi xong message
    producer.close();
}

}

`

Trong ví dụ này:

  • Chúng ta thiết lập các cấu hình cơ bản cho producer, bao gồm địa chỉ của Kafka broker, serializer cho key và value.

  • Khởi tạo một KafkaProducer với các cấu hình đã thiết lập.

  • Tạo một ProducerRecord với thông tin về topic, key và value của message.

  • Sử dụng phương thức send() để gửi message đến Kafka. Phương thức này nhận một callback để xử lý kết quả sau khi gửi message.

  • Cuối cùng, chúng ta đóng producer sau khi đã gửi xong message.

Vui lòng thay đổi các giá trị như địa chỉ Kafka broker và topic tùy thuộc vào môi trường của bạn.

1 phản hồi

  1. seoyttop #1

    Kafka là gì? Kafka là gì? Là hệ thống message pub/sub phân tán (distributed messaging system). Bên pulbic dữ liệu được gọi là producer, bên subscribe nhận dữ liệu theo topic được gọi là consumer. Kafka có khả năng truyền một lượng lớn message theo thời gian thực, trong trường hợp bên nhận chưa nhận message vẫn được lưu trữ sao lưu trên một hàng đợi và cả trên ổ đĩa bảo đảm an toàn. Đồng thời nó cũng được replicate trong cluster giúp phòng tránh mất dữ liệu.

    Tại sao nên sử dụng Apache Kafka? Kafka là dự án opensoure, đã được đóng gói hoàn chỉnh, khả năng chịu lỗi cao, hiệu năng rất tốt và dễ dàng mở rộng mà không cần dừng hệ thống.

    Một vài use case cho kafka:

    • Sử dụng như một hệ thống message queue thay thế cho ActiveMQ hay RabbitMQ

    • Website Activity Monitoring: theo dõi hoạt động của website

    • Stream Processing: Kafka là một hệ thống rất thích hợp cho việc xử lý dòng dữ liệu trong thời gian thực. Khi dữ liệu của một topic được thêm mới ngay lập tức được ghi vào hệ thống và truyền đến cho bên nhận. Ngoài ra Kafka còn là một hệ thống có đặc tính duribility dữ liệu có thể được lưu trữ an toàn cho đến khi bên nhận sẵn sàng nhận nó.

    • Log Aggregation: tổng hợp log

    • Metrics Collection: thu thập dữ liệu, tracking hành động người dùng như các thông số như page view, search action của user sẽ được publish vào một topic và sẽ được xử lý sau

    • Event-Sourcing: Lưu lại trạng thái của hệ thống để có thể tái hiện trong trường hợp system bị down.

Bài liên quan trong #Java

✓ Đã sao chép link