Giới thiệu tổng quan về kafka, cách sử dụng cũng như cài đặt

Kafka là gì?

Kafka là một nền tảng truyền dữ liệu phân tán (distributed messaging system). Kafka sử dụng mô hình truyền thông public-subscribe, 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 dữ liệu trong thời gian thực, trong trường hợp bên nhận chưa nhận dữ liệu 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.

Sơ đồ hệ thống truyền dữ liệu kafka

Sơ đồ hệ thống truyền dữ liệu kafka

Một số khái niệm trong kafka mà bạn cần nắm được:

PRODUCER PUBLIC DỮ LIỆU MÀ HỆ THỐNG MUỐN TRUYỀN THEO MỘT TOPIC, DỮ LIỆU ĐƯỢC GỬI ĐẾN PARTITION CỦA TOPIC LƯU TRỮ TRÊN BROKER. PRODUCER SỬ DỤNG THUẬT TOÁN ROUND-ROBIN ĐỂ LỰA CHỌN PARTITION ĐẢM BẢO CÂN BẰNG TẢI.
CONSUMER  CÁC CONSUMER ĐƯỢC ĐỊNH DANH BẰNG CÁC GROUP NAME VÀ ĐỌC DỮ LIỆU TỪ TOPIC MÀ MÌNH ĐÃ SUBSCRIBE. CÓ THỂ CÓ NHIỀU CONSUMER CÙNG ĐỌC MỘT TOPIC.
TOPIC  DỮ LIỆU ĐƯỢC TRUYỀN TRONG KAFKA THEO TOPIC. KHI BẠN CẦN TRUYỀN DỮ LIỆU CHO CÁC ỨNG DỤNG KHÁC NHAU BẠN SẼ TẠO RA CÁC TOPIC KHÁC NHAU.
PARTITION  PARTITION LÀ NƠI LƯU DỮ LIỆU CHO MỘT TOPIC. MỘT TOPIC CÓ THỂ CÓ MỘT HAY NHIỀU PARTITION. TRÊN MỖI PARTITION DỮ LIỆU ĐƯỢC LƯU TRỮ THEO MỘT TRẬT TỰ BẤT BIẾN VÀ ĐƯỢC GÁN CHO MỘT ID THỨ TỰ GỌI LÀ OFFSET. TRONG MỘT KAFKA CLUSTER MỖI PARTITION CÓ THỂ ĐƯỢC TẠO RA NHIỀU BẢN SAO CHÉP (REPLICATE) TRONG ĐÓ SẼ CÓ MỘT BẢN LEADER THỰC HIỆN ĐỌC GHI DỮ LIỆU VÀ CÁC BẢN CÒN LẠI GỌI LÀ BẢN FLOWER, KHI BẢN LEADER BỊ LỖI SẼ CÓ MỘT BẢN FLOWER LÊN LÀM LEADER THAY THẾ. NẾU BẠN MUỐN DÙNG NHIỀU CONSUMER ĐỂ ĐỌC SONG SONG DỮ LIỆU CỦA MỘT TOPIC THÌ TOPIC ĐÓ PHẢI CÓ NHIỀU PARTITION.
BROKER  BROKER LÀ NƠI LƯU TRỮ CÁC PARTITION. MỘT BROKER CÓ THỂ CÓ MỘT HOẶC NHIỀU PARTITION.

Một đặc điểm quan trong của kafka bạn cần phải nhớ là nền tảng Kafka được xây dựng kết hợp với Apache Zookeeper. Kafka sử dụng Zookeeper để lưu trữ các thông tin chung metadata như thông tin về topic, partition của topic, danh sách broken, vị trí dữ liệu offset mà consumer đã đọc đến… Bạn có thể đọc thêm về Zookeeper ở đây https://zookeeper.apache.org/

>> Tập tành tìm hiểu Kafka dân Newbie bạn ơi

Dùng Kafka để làm?

Kafka là một nền tảng truyền dữ liệu có khả năng phân tán (distributed), dung lỗi (fault rolerance), dễ dàng mỡ rộng mà không cần dừng hệ thống (scalability ), có hiệu năng rất tốt không những có khả năng truyềnmà còn có thể lưu trữ lượng lớn dữ liệu. Trong thực tế có rất nhiều bài toán và trường hợp bạn có thể sử dụng Kafka cho hệ thống của mình ví dụ như:

  • Bài toán theo dõi dữ liệu. Yêu cầu hệ thống cần phải thống kê dữ liệu trong một hệ thống phân tán, dữ liệu đến từ rất nhiều nguồn khác nhau sau đó truyền đi đến nhiều nơi khác nhau khi đó kafka sẽ đóng vai trò như một trung tâm tổng hợp dữ liệu.
  • Bài toán 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ó.

Cách cài đặt và sử dụng trên hệ điều hành linux.

Kafka là một nền tảng nguồn mở được viết bằng java vì vậy trước khi cài đặt Kafka chúng ta cần phải cài đạt java:

Bạn có thể download bản jdk mới nhất tại đây http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

Cách cài đặt và sử dụng trên hệ điều hành linux.

Kafka là một nền tảng nguồn mở được viết bằng java vì vậy trước khi cài đặt Kafka chúng ta cần phải cài đạt java:

Bạn có thể download bản jdk mới nhất tại đây http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

~$ tar -zxf jdk-8u121-linux-x64.tar.gz
~$ su
password: (type password of root user)
#$ mkdir /opt/jdk
#$ mv jdk-1.8.0_60 /opt/jdk/

Tạo biến môi trường JAVA_HOME bằng cách thêm hai dòng sau vào tệp .bashrc

export JAVA_HOME =/usr/jdk/jdk-1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin

~$ vim ~/.bashrc
~$ source ~/.bashrc

Cài đặt Zookeeper

Trong phiên bản Kafka hiện tại đã được tích hợp phiên bản Zookeeper mới nhất vì vậy bạn có thể chạy Zookeeper có sẵn trong Kafka hoặc có thể cài đặt riêng bằng cách download Zookeeper tại đây http://www.apache.org/dyn/closer.cgi/zookeeper/. Trước khi chạy Zookeeper bạn cần thiết lập một số tham số trong tệp config phù hợp với mục đích sử dụng của mình.

$ vim config/zookeeper.properties

dataDir=/storage/kafka/zookeeper-data (thư mục chứa dữ liệu cần lưu của zookeeper)
clientPort=2181 (port mà zookeeper lắng nghe)
maxClientCnxns=0 (disable giới hạn connect từ một địa chỉ ip)

Cài đặt Kafka

Download phiên bản kafka mới nhất tại https://kafka.apache.org/

~$ wget http://mirrors.viethosting.com/apache/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz
~$ tar -xzf kafka_2.10-0.10.2.0.tgz

Sữa lại các tham số cấu hình cho phù hợp với hệ thống.

~$ mv kafka_2.10-0.10.2.0 kafka
~$ cd kafka
$ vim config/server.propertise
broker.id=65
listeners=PLAINTEXT://your.host.kafka:9092
log.dirs=/storage/kafka/kafka-data (thư mục chứa data của kafka)
num.partitions=1
zookeeper.connect=your.host.zookeeper:2181

Bạn có thể xem thêm các tham số khác và ý nghĩa của nó trong file server.propertise

Kafka có thể được cài đặt trên một máy chủ hoặc cài đặt trên một cluster (cụm máy chủ). Khi cài đặt Kafka trên cluster bạn thực hiện các bước tương tự như ở trên chỉ chú ý là cấu hình sao cho các máy chủ trong cluster dùng chung một zookeeper.

Chạy Kafka và Zookeeper.Trên hệ điều hành linux bạn nên chạy Kafka và Zookeeper như các tiến trình ngầm sử dụng screen hoặc nohup.

~$ screen -S zookeeper-server bin/zookeeper-server-start.sh config/zookeeper.properties
~$ screen -S kafka-server bin/kafka-server-start.sh config/server.properties

Sau đây là một ví dụ đơn giản sử dụng Kafka bằng dòng lệnh.
Tạo  topic "kafka-test".

$ bin/kafka-topic.sh --zookeeper --create your.host.zookeeper:2181 --topic kafka-test

Xem danh sách topic đã được tạo trên kafka.

$ bin/kafka-topic.sh --zookeeper your.host.zookeeper:2181 --list
>kafka-test

Đẩy dữ liệu vào topic kafka-test.

$ bin/kafka-console-producer.sh --broker-list your.host.kafka:9092 --topic kafka-test
...
>Hello! this is kafka tutorial.

Đọc dữ liệu đã đẩy vào topic kafka-test.

$ bin/kafka-console-consumer.sh --bootstrap-server your.host.kafka:9092 --from-beginning --topic kafka-test
...
>Hello! this is kafka tutorial.

Kafka cluster web UI

Có một tool giao diện web cho cluster kafka rất tiện ích mình muốn giới thiệu cho các bạn Kafka Manager. Tool này là mã nguồn mở được phát triển bởi Yahoo. Các bạn có thể dowload và xem hướng dẫn sử dụng, cài đặt ở đây. github.com/yahoo/kafka-manager

Trên đây là bài viết giới thiệu tổng quan về kafka, cách sử dụng cũng như cài đặt. Nếu có ý kiến gì bạn vui lòng comment bên dưới nhé. Chúc bạn làm việc vui vẻ

Fivestar: 
No votes yet