Chương 2: Khám Phá Chi Tiết Về Kafka 📚
Trong chương này, chúng ta sẽ tìm hiểu sâu về các thành phần cốt lõi của Kafka, từ khái niệm producing và consuming messages đến cấu trúc hệ thống nội bộ như brokers, ZooKeeper và các gói mã nguồn quan trọng như Kafka Streams và Kafka Connect. Đây là nền tảng cần thiết giúp bạn hiểu rõ cách thức hoạt động của Kafka và lý do tại sao nó trở thành công cụ phổ biến trong kiến trúc xử lý dữ liệu theo thời gian thực.
2.1 Producing và Consuming Tin Nhắn 🔄
Mỗi tín hiệu (message/record) trong Kafka có một cặp key và value riêng biệt. Sự phân chia này cho phép xử lý linh hoạt và hiệu quả hơn trong việc gửi và nhận dữ liệu.
2.2 Brokers Trong Kafka 🖥️
Brokers Là Gì?
- Broker là các máy chủ trong hệ thống Kafka, đảm nhiệm việc lưu trữ và quản lý dữ liệu.
- Một cluster Kafka có thể có nhiều brokers, giúp tăng cường khả năng mở rộng và độ tin cậy của hệ thống.
Vai Trò Của Broker Trong Kafka
- Quản lý và lưu trữ messages trong các partitions.
- Thực hiện cơ chế replication (sao chép dữ liệu) nhằm đảm bảo tính khả dụng và độ tin cậy.
- Phân chia tải giữa các broker để xử lý dữ liệu lớn.
2.3 Giới Thiệu Về Kafka 🚀
Producers và Consumers
- Producers: Gửi tin nhắn đến các topics trong Kafka.
- Consumers: Đọc tin nhắn từ các topics này.
- Hệ thống tách biệt giữa producers và consumers giúp cho việc mở rộng và bảo trì trở nên dễ dàng hơn.
Ví Dụ Về Producer Gửi Tin Nhắn:
java
Alert alert = new Alert(1, "Stage 1", "CRITICAL", "Stage 1 stopped");
ProducerRecord<Alert, String> producerRecord =
new ProducerRecord<Alert, String>
("kinaction_alert", alert, alert.getAlertMessage());
producer.send(producerRecord);
producer.close();
Ví Dụ Về Consumer Nhận Tin Nhắn:
java
consumer.subscribe(List.of("kinaction_audit"));
while (keepConsuming) {
var records = consumer.poll(Duration.ofMillis(250));
for (ConsumerRecord<String, String> record : records) {
log.info("kinaction_info offset = {}, kinaction_value = {}",
record.offset(), record.value());
consumer.commitSync(...);
}
}
Tổng Quan Về Topics
- Topics là trung tâm lưu trữ các tin nhắn trong Kafka.
- Một topic được chia thành nhiều partitions để dữ liệu có thể xử lý song song, nâng cao hiệu suất.
Sử Dụng ZooKeeper
- ZooKeeper là dịch vụ quản lý và điều phối, giám sát trạng thái các broker và phân bổ partition leader.
Kiến Trúc Tổng Quan Của Kafka
- Kafka áp dụng kiến trúc phân tán với các thành phần chính bao gồm:
- Producers
- Brokers
- Consumers
- ZooKeeper
- Dữ liệu được lưu trữ trong partitions, đảm bảo khả năng mở rộng và xử lý song song.
Kafka đạt được hiệu suất cao nhờ sử dụng OS Page Cache, giúp đọc/ghi dữ liệu nhanh hơn mà không phụ thuộc vào bộ nhớ heap của JVM.
Tại Sao Kafka Không Sử Dụng JVM Heap?
- Hiệu suất: JVM Heap thường bị ảnh hưởng bởi vấn đề Garbage Collection gây ra độ trễ.
- Tối ưu hóa tài nguyên: Sử dụng Page Cache của hệ điều hành giúp giảm tải cho hệ thống.
- Dữ liệu lớn: Kafka xử lý hàng terabyte dữ liệu, vượt xa giới hạn của bộ nhớ JVM Heap.
Commit Log
- Kafka lưu trữ tin nhắn dưới dạng commit log, với mỗi tin nhắn được gán một offset và lưu trữ lâu dài.
2.4 Các Gói Mã Nguồn Khác Nhau và Chức Năng Của Chúng 💻
Kafka Streams
- Kafka Streams là thư viện hỗ trợ xử lý dữ liệu thời gian thực từ Kafka.
- Giúp xây dựng các ứng dụng stream processing mà không cần thêm hệ thống,hỗ trợ các tính năng như stateful processing và distributed joins.
Lợi Ích Của Kafka Streams API
-
API dễ sử dụng: Cú pháp fluent API, tương tự như Stream API trong Java 8.
-
Xử lý dữ liệu trực tiếp trên nền Kafka: Tận dụng khả năng của Kafka để vận hành hiệu quả hơn.
-
Phân phối và mở rộng: Thích hợp cho các hệ thống lớn với nhiều nút trong cluster.
-
Ứng dụng trong Microservice: Cho phép chia sẻ dữ liệu qua Kafka thay vì kết nối trực tiếp giữa các microservices.
2.5 Kafka Connect
- Kafka Connect là công cụ kết nối giữa Kafka với các hệ thống khác như databases, Hadoop, hoặc Elasticsearch.
- Hỗ trợ cả source connectors và sink connectors.
AdminClient Package
- Cung cấp các API quản lý cơ bản như tạo, xóa topic và quản lý cấu hình của broker.
ksqlDB
- ksqlDB cho phép thực thi các truy vấn SQL trên dữ liệu Kafka, giúp người dùng có thể lọc, chuyển đổi và tổng hợp dữ liệu theo thời gian thực.
2.6 Xử Lý Luồng và Thuật Ngữ Liên Quan 🌊
Stream Processing Là Gì?
- Stream processing là quá trình xử lý dữ liệu liên tục trong thời gian thực.
Kafka Streams và Các Khái Niệm Liên Quan
- Exactly-once: Đảm bảo rằng mỗi tin nhắn chỉ được xử lý đúng một lần, một thách thức lớn trong hệ thống phân tán.
Tài Nguyên Tham Khảo 🔗
Để mở rộng kiến thức, bạn có thể tham khảo:
- Tài liệu của Apache Kafka
- Nền tảng Confluent
- Các khóa học về Kafka trên Udemy hoặc Coursera.
Lời Kết 🎯
Trong Chương 2, bạn đã làm quen với các khái niệm cốt lõi trong Kafka như producer, consumer, broker và kiến trúc cơ bản của hệ thống. Các công cụ như Kafka Streams, Kafka Connect và ksqlDB sẽ giúp bạn khai thác tối đa tích khả năng của Kafka trong các dự án thực tế của mình. Trong các chương tiếp theo, chúng ta sẽ tiếp tục khám phá sâu hơn về cách triển khai và tối ưu hóa Kafka trong hệ thống của bạn. 🚀
source: viblo