
Apache Kafka là nền tảng streaming sự kiện phân tán mã nguồn mở, được sử dụng bởi hàng nghìn công ty lớn nhỏ trên toàn thế giới để xử lý dữ liệu thời gian thực với quy mô cực lớn. Từ các startup ban đầu đến các tập đoàn Fortune 500, Kafka đã trở thành xương sống không thể thiếu của kiến trúc dữ liệu hiện đại. Ban đầu được phát triển tại LinkedIn, Kafka sau đó được đóng góp cho Apache Software Foundation và đã trở thành một trong những dự án Apache được sử dụng phổ biến nhất.

Apache Kafka là gì?
Apache Kafka là một hệ thống message queue phân tán, mã nguồn mở, viết bằng Scala và Java. Kafka được thiết kế để xử lý streaming sự kiện theo thời gian thực với khả năng lưu trữ lâu dài, xử lý song song, và phân phối dữ liệu ở quy mô hàng triệu sự kiện mỗi giây trên các cụm server phân tán.
Điểm khác biệt cốt lõi giữa Kafka và message queue truyền thống (như RabbitMQ, ActiveMQ) là Kafka lưu trữ sự kiện một cách durable theo log append-only, cho phép consumer đọc lại dữ liệu đã qua nhiều lần. Điều này mở ra khả năng replay events, điều mà các hệ thống message queue truyền thống không hỗ trợ.
Các khái niệm cốt lõi của Kafka
Event (Sự kiện)
Đơn vị dữ liệu cơ bản trong Kafka. Một event ghi nhận “điều gì đã xảy ra” trong thế giới thực hoặc trong hệ thống của bạn. Về mặt khái niệm, một event bao gồm: key (định danh), value (nội dung), timestamp (thời điểm xảy ra), và optional metadata headers. Ví dụ: “Alice đã thanh toán $200 cho Bob” vào lúc 2:06 PM ngày 25/6.

Topic
Topic là danh mục logic chứa các event, tương tự như folder trong filesystem. Mỗi topic có thể có nhiều producer ghi dữ liệu vào và nhiều consumer đọc dữ liệu từ đó. Events trong topic không bị xóa sau khi consumed – chúng được lưu trữ theo cấu hình retention (mặc định 7 ngày).
Partition
Topic được chia thành các partition để phân tán dữ liệu trên nhiều broker trong cluster. Partition đảm bảo: (1) khả năng song song hóa – nhiều consumer có thể đọc đồng thời từ các partition khác nhau, và (2) thứ tự guaranteed – trong cùng một partition, events luôn được đọc theo đúng thứ tự ghi.
Producer, Consumer, Broker
- Producer: Ứng dụng gửi event vào Kafka topic. Producer có thể chọn partition cho mỗi event dựa trên key hoặc round-robin.
- Consumer: Ứng dụng đọc và xử lý event từ Kafka topic. Consumer thuộc một consumer group, mỗi partition chỉ được xử lý bởi tối đa 1 consumer trong cùng nhóm.
- Broker: Server Kafka trong cluster, lưu trữ data và xử lý requests từ producer/consumer. Mỗi broker trong cluster chia sẻ load.
Kiến trúc Kafka hoạt động như thế nào
Kafka hoạt động theo mô hình cluster gồm nhiều broker (server). Dữ liệu được lưu trữ theo topic-partition trên nhiều broker khác nhau. Mỗi topic-partition có một bản sao (leader) trên một broker và có thể có nhiều bản sao sao chép (followers) trên các broker khác để đảm bảo fault tolerance.

Replication factor mặc định là 3, có nghĩa là dữ liệu luôn có 3 bản sao trên 3 broker khác nhau. Khi một broker gặp sự cố, các broker khác tự động tiếp quản – đảm bảo continuous operation không mất dữ liệu.
Kafka sử dụng binary TCP-based protocol được tối ưu hóa cho high-throughput, low-latency. Kết hợp với concept “message set” giúp gom nhóm messages lại giảm overhead mạng, biến Kafka thành một trong những hệ thống streaming nhanh nhất thế giới.
So sánh Kafka với Message Queue truyền thống
| Tính năng | Kafka | RabbitMQ | ActiveMQ |
|---|---|---|---|
| Mô hình | Event streaming với lưu trữ dài hạn | Message queue, xóa sau consume | Enterprise message queue đa protocol |
| Throughput | Triệu event/giây | Trăm nghìn msg/giây | Trăm nghìn msg/giây |
| Lưu trữ | Durable, replay được, retention cấu hình | Tạm thời | Tạm thời hoặc durable |
| Scaling | Horizontal, elastic, không giới hạn | Vertical chủ yếu | Horizontal hạn chế |
| Ordering | Guaranteed per partition | Guaranteed per queue | Guaranteed per destination |
| Use case điển hình | Real-time analytics, log aggregation, event sourcing | Task queue, RPC, routing | Enterprise messaging, JMS |
5 API cốt lõi của Kafka
- Producer API: Cho phép ứng dụng gửi event stream vào Kafka topic. Producer hỗ trợ batching, compression, và đảm bảo delivery semantics (at-most-once, at-least-once, exactly-once).
- Consumer API: Cho phép ứng dụng đọc và xử lý event stream từ Kafka topic. Consumer quản lý offset tự động hoặc thủ công, cho phép kiểm soát chính xác khi nào event được đánh dấu là đã xử lý.
- Kafka Streams API: Thư viện xử lý streaming dữ liệu, cho phép biến đổi, tổng hợp, và phân tích dữ liệu trực tiếp trên Kafka. Hỗ trợ windowing, joins, và stateful processing.
- Kafka Connect API: Công cụ tích hợp với các hệ thống bên ngoài (database, file system, cloud services) thông qua connectors. Có hàng trăm connectors có sẵn cho các hệ thống phổ biến như PostgreSQL, Elasticsearch, S3, MongoDB.
- Admin API: Quản lý topic, broker, ACL, và cấu hình cluster thông qua API lập trình.
Quick Start – Bắt đầu với Kafka trong 5 phút
Cài đặt và chạy Kafka yêu cầu Java 17+. Sau đây là các bước cơ bản:
- Bước 1: Download Kafka từ kafka.apache.org/downloads
- Bước 2: Khởi động ZooKeeper (nếu không dùng KRaft mode):
bin/zookeeper-server-start.sh config/zookeeper.properties - Bước 3: Khởi động Kafka broker:
bin/kafka-server-start.sh config/server.properties - Bước 4: Tạo topic:
bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 - Bước 5: Gửi event:
bin/kafka-console-producer.sh --topic my-topic --bootstrap-server localhost:9092 - Bước 6: Đọc event:
bin/kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server localhost:9092
Ứng dụng thực tế của Kafka
Kafka được sử dụng rộng rãi trong nhiều lĩnh vực và trường hợp sử dụng:
Log Aggregation (Gom log)
Gom log từ nhiều microservice vào một Kafka topic duy nhất, sau đó phân tích bằng Kafka Streams hoặc gửi đến Elasticsearch/Kibana để monitoring. Các nền tảng như Netflix, Uber, và LinkedIn sử dụng Kafka cho log aggregation quy mô lớn.
Real-time Analytics (Phân tích thời gian thực)
Xử lý và phân tích dữ liệu time-series, clickstream, hoặc IoT data ngay khi nó được tạo ra. Các công ty như Pinterest, Airbnb, và Netflix phân tích hàng tỷ events mỗi ngày qua Kafka.
Event Sourcing (Nguồn gốc sự kiện)
Lưu trữ lịch sử tất cả thay đổi của ứng dụng dưới dạng events. Điều này cho phép rebuild trạng thái bất kỳ lúc nào, debug dễ dàng hơn, và audit đầy đủ. CQRS (Command Query Responsibility Segregation) thường kết hợp với Event Sourcing.
Stream Processing (Xử lý streaming)
Biến đổi, enriching, và aggregate data trên dòng chảy theo thời gian thực. Kafka Streams API và ksqlDB cho phép viết logic xử lý streaming bằng Java hoặc SQL thuần.
Microservices Communication (Truyền thông giữa microservices)
Decoupled communication giữa các dịch vụ – producer không cần biết consumer và ngược lại. Điều này giúp hệ thống linh hoạt hơn, dễ mở rộng và bảo trì hơn.
Kafka Ecosystem và các công cụ liên quan
- Kafka Connect: Tích hợp dữ liệu với hệ thống bên ngoài
- Kafka Streams: Processing streaming dữ liệu
- ksqlDB: Streaming SQL interface
- Kafka Schema Registry: Quản lý schema cho Avro/Protobuf/JSON
- Confluent Platform: Kafka distribution thương mại với thêm tính năng
- KRaft: Raft-based consensus loại bỏ ZooKeeper dependency
Kết luận
Apache Kafka là công cụ không thể thiếu trong kiến trúc microservices và data pipeline hiện đại. Khả năng xử lý hàng triệu event mỗi giây, lưu trữ dài hạn với replay capability, và tích hợp linh hoạt với hệ sinh thái phong phú khiến Kafka trở thành lựa chọn hàng đầu cho real-time data streaming. Cho dù bạn là startup bắt đầu với data pipeline đơn giản hay enterprise với hạ tầng phức tạp, Kafka đều cung cấp nền tảng vững chắc và có khả năng mở rộng cùng với doanh nghiệp của bạn.
Bắt đầu với Kafka dễ hơn bạn nghĩ – chỉ cần Java 17+, một vài lệnh terminal, và vài phút. Nhưng sức mạnh thực sự của nó chỉ được giải phóng khi bạn tích hợp vào kiến trúc ứng dụng của mình.
Tài nguyên tham khảo thêm:
• Kafka Documentation
• Kafka Quick Start
• Kafka Streams
• Kafka How-To Guide by Confluent
