Tìm hiểu về apache kafka
kafka
5
White

Hoàng Minh Trung viết ngày 06/07/2015

Giới thiệu

alt text
Về cơ bản kafka là hệ thống message pub/sub phân tán mà có khả năng scale rất tốt.
Message của kafka được lưu trên đĩa cứng, đồng thời được replicate trong cluster giúp phòng tránh mất 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.

Các khái niệm cơ bản

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.

Định nghĩa trên được giải thích bằng các khái niệm sau:

  • 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

alt text

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:
img

Mỗi partition là một chuỗi log, có thứ tự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.
alt text

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

img

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

Use case

  • Sử dụng như một hệ thống message queue thay thế cho ActiveMQ hay RabbitMQ
  • Tracking hành động người dùng : 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
  • Log Aggregration: log sẽ được gửi từ nhiều server về một nơi thống nhất, sau đó có thể được làm sạch và xử lý theo một logic nào đó
  • 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. Tham khảo Bài viết của martin

Trong bài viết sau mình sẽ viết về cách sử dụng của kafka với các ví dụ.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hoàng Minh Trung

23 bài viết.
61 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
19 1
Bài viết dịch từ http://arslan.io/tenusefultechniquesingo Sử dụng một GOPATH duy nhất Sử dụng đồng thời nhiều GOPATH sẽ không giúp cho hệ thống ...
Hoàng Minh Trung viết 2 năm trước
19 1
White
18 15
(Ảnh) Mục đích của bài viết là hướng dẫn cơ bản nhất cho những ai chưa biết về docker, môi trường thực hiện là mac OS. Chuẩn bị Cài đặt virtua...
Hoàng Minh Trung viết gần 3 năm trước
18 15
White
14 0
Bài viết dịch từ https://github.com/luciotato/golangnotes/blob/master/OOP.md Mục đích bài viết Học golang dễ dàng hơn với những kiến thức bạn đ...
Hoàng Minh Trung viết 2 năm trước
14 0
Bài viết liên quan
White
2 0
Bạn có một file log, bạn muốn đổ log vào một topic nào đó trên kafka cho một ai đó dùng. Một cách nhanh chóng có thể sử dụng producer console như s...
Quăng viết gần 2 năm trước
2 0
White
3 0
Cài đặt Download kafka từ một trong các link dưới đây: https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.2.0/kafka_2.100.8.2.0.tgz Kafka là ...
Hoàng Minh Trung viết 3 năm trước
3 0
White
3 0
Khi sử dụng một số hệ thống tính toán phân tán mà setup sẽ mất thời gian như kafka chẳng hạn, đôi khi bạn muốn kafka chỉ chạy trong test session rồ...
Hoàng Minh Trung viết gần 3 năm trước
3 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
23 bài viết.
61 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!