-
Giới thiệu Apache Kafka
+ Kafka: hệ thống hàng đợi dữ liệu (message queue) phục vụ chức năng thu thập dữ liệu đầu vào (stream ingestion system).
+ Kafka là một hệ thống xử lý hàng đợi theo cơ chế publish-subscribe; Kafka còn hỗ trợ triển khai hệ thống thu thập log theo mô hình phân tán (distribute), phân chia (partition), và đồng bộ (replicate). Mã nguồn Kafka được thiết kế cho việc xử lý dữ liệu lớn khi đọc/ghi dữ liệu, giảm độ trễ trong quá trình truyền tải dữ liệu.
+ Kafka có thể hiểu là một hệ thống logging, nhằm lưu lại các trạng thái của hệ thống, nhằm phòng tránh mất thông tin.
2. Kiến trúc tổng quan về Apache Kafka
- Kafka lưu, phân loại message theo
topics
- Kafka sử dụng
producers
để publish message vào các topics ở trên - Kafka sử dụng
consumers
để subscribe vào topics, sau đó xử lý các message lấy được theo một logic nào đó - Kafka thường được chạy dưới dạng cluster, khi đó mỗi server trong đó sẽ được gọi là
broker.
Topic
Topic có thể hiểu là một ngôn ngữ chung giữa producer (người nói) và consumer (người nghe, sử dụng).
Với mỗi topic, kafka sẽ duy trì thông qua partitioned log như dưới đây:
+ Mỗi partition là một chuỗi log, có thứ tự và không thể thay đổi (immutable).
+ Mỗi message trong partition sẽ có id tăng dần , gọi là offset
Về cách chọn partition number cho tốt, có thể tham khảo ở link : http://blog.confluent.io/2015/03/12/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/
+ Kafka cluster sẽ lưu lại mọi message đã được published, cho dù message đó đã được/chưa được sử dụng (consume). Thời gian lưu message có thể tuỳ chỉnh được thông qua log retention
.
Một điểm thú vị là Consumer sẽ điều khiển những gì mình muốn đọc thông qua offset
của message, hay thậm chí là thứ tự đọc. Consumer có thể reset
lại vị trí của offset để re-process lại một vài message nào đó.
Producer
Như đã nói ở trên, producer nhằm mục đích chính là ném message vào topic. Cụ thể hơn là producer có nhiệm vụ là chọn message nào, để ném vào partition nào trong topic. Nhiệm vụ này rất quan trọng, giúp cho kafka có khả năng “scale” tốt.
Consumer
Thông thường thì một hệ thống messaging sẽ có 2 loại
- Queue: Một message sẽ được xử lý bởi một consumer
- Pub/Sub: Một message sẽ được xử lý bởi một vài consumer thích hợp, tuỳ theo topic
Ở kafka chúng ta có một khái niệm gọi là consumer group
giúp chúng ta có thể làm được đồng thời cả 2 loại trên, rất thú vị. Việc subscribe một topic sẽ được thực hiện bởi consumer group
. Mỗi một message sẽ được gửi cho duy nhất một consumer instance trong một consumer group
. Việc này dấn đến điều gì?
- Nếu nhiều instance consumer có cùng group: chúng ta sẽ có một hệ thống queue
- Nếu mỗi instance là một group, chúng ta sẽ có một hệ thống pub/sub
Kafka đảm bảo
- Message được gửi bởi producer đến một topic partition nào đó sẽ được đảm bảo thứ tự , thông qua
offset
- Consumer instance sẽ nhìn thấy message theo đúng thứ tự trong log
3. So sánh apache kafka với rabbitMQ
RabbitMQ | ||
---|---|---|
What it is? | RabbitMQ is a solid, mature, general purpose message broker that supports several standardized protocols such as AMQP | Apache Kafka is a message bus optimized for high-ingress data streams and replay |
Primary use | High-throughput and reliable background jobs, communication and integration within, and between applications. | Build applications that process and re-process streamed data on disk |
License | Open Source: Mozilla Public License | Open Source: Apache License 2.0 |
Written in | Erlang | Scala (JVM) |
Client libraries | Many mature libraries, including: Ruby, Python, Node.js, Clojure, Go, Java and C | Many, including: Ruby, Python, Node.js and Java |
Support for HA | Yes | Yes |
Federated queues | Yes | No |
Complex routing scenarios | Yes | No |
Scaling strategies | Mostly vertical | Built from the ground up with horizontal scaling in mind |
Hosted solution & Enterprise Support | Available from CloudAMQP | Available fromCloudKarafka |
4. Cài đặt & cấu hình:
Có thể tham khảo document bên dưới
- https://www.dropbox.com/s/9omnnckwiqeq6sd/KAFKA.docx?dl=0
5. Một số site tham khảo về các vấn đề Apache Kafka
- https://dzone.com/articles/understanding-kafka-consumer-groups-and-consumer-l
- https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Controller+Internals
- https://anturis.com/blog/apache-kafka-an-essential-overview/
- http://codingpearls.com/big-data/apache-spark/xay-dung-mot-realtime-dashboard-su-dung-spark-streaming-kafka-nodejs-va-mongodb.html