Giới thiệu tổng quan về Apache Kafka

Apache Kafka được bắt nguồn từ LinkedIn và sau đó trở thành một dự án Apache mã nguồn mở vào năm 2011. Kafka được viết bằng Scala và Java.

Apache Kafka là hệ thống nhắn tin có khả năng chịu lỗi cao dựa trên publish-subscribe. Nó rất nhanh, có thể mở rộng và thiết kế phân tán.

Hướng dẫn này sẽ giúp bạn khám phá các nguyên tắc của Kafka, cài đặt, thao tác và sau đó nó sẽ hướng dẫn bạn cách triển khai Kafka cluster. Cuối cùng, chúng tôi sẽ kết thúc với một số ứng dụng thời gian thực và tích hợp với công nghệ dữ liệu lớn (Big Data).

Trong dữ liệu lớn, một khối lượng dữ liệu khổng lồ được sử dụng. Về dữ liệu, chúng ta có hai thách thức chính, thách thức đầu tiên là làm thế nào để thu thập khối lượng lớn dữ liệu và thách thức thứ hai là phân tích dữ liệu đã thu thập. Để vượt qua những thách thức đó, bạn phải cần một hệ thống nhắn tin.

Kafka được thiết kế cho các hệ thống phân tán thông lượng cao. Kafka có xu hướng hoạt động rất hiệu quả như một sự thay thế cho các message broker truyền thống hơn.

So với các hệ thống nhắn tin khác, Kafka có thông lượng tốt hơn, tích hợp phân vùng, sao chép và khả năng chịu lỗi cao, điều này làm cho nó phù hợp với các ứng dụng xử lý tin nhắn quy mô lớn.

Hệ thống nhắn tin là gì?

Hệ thống nhắn tin (Messaging System) chịu trách nhiệm chuyển dữ liệu từ ứng dụng này sang ứng dụng khác, vì vậy các ứng dụng có thể tập trung vào dữ liệu, nhưng không phải lo lắng về cách chia sẻ dữ liệu đó.

Nhắn tin phân tán dựa trên khái niệm hàng đợi tin nhắn đáng tin cậy. Tin nhắn được xếp hàng đợi không đồng bộ giữa các ứng dụng khách và hệ thống nhắn tin.

Có sẵn hai kiểu nhắn tin - một kiểu là hệ thống nhắn tin điểm tới điểm (point-to-point) và kiểu kia là hệ thống nhắn tin xuất bản - đăng ký (pub-sub). Hầu hết các kiểu nhắn tin đều tuân theo kiểu pub-sub.

Hệ thống nhắn tin điểm tới điểm (point-to-point)

Trong hệ thống nhắn tin điểm tới điểm (point-to-point), các thông báo được lưu trong một hàng đợi. Một hoặc nhiều consumer có thể sử dụng các tin nhắn trong hàng đợi, nhưng một tin nhắn cụ thể chỉ có thể được sử dụng bởi tối đa một consumer.

Khi consumer đọc một tin nhắn trong hàng đợi, tin nhắn đó sẽ biến mất khỏi hàng đợi đó.

Ví dụ điển hình của hệ thống này là hệ thống xử lý đơn hàng, trong đó mỗi đơn hàng sẽ được xử lý bởi một trình xử lý đơn hàng, nhưng nhiều trình xử lý đơn hàng cũng có thể hoạt động cùng một lúc.

Sơ đồ sau đây mô tả cấu trúc hệ thống nhắn tin điểm tới điểm:

Hệ thống nhắn tin điểm tới điểm (point-to-point)

Hệ thống nhắn tin xuất bản - đăng ký (pub-sub)

Trong hệ thống xuất bản - đăng ký (pub-sub), các tin nhắn vẫn tồn tại trong một chủ đề (topic).

Không giống như hệ thống nhắn tin điểm tới điểm, consumer có thể đăng ký một hoặc nhiều chủ đề và xem tất cả các tin nhắn trong chủ đề đó.

Trong hệ thống xuất bản - đăng ký, bên gửi tin nhắn được gọi là publisher và bên nhận tin nhắn được gọi là subcriber.

Hệ thống nhắn tin xuất bản - đăng ký (pub-sub)

Kafka là gì?

Apache Kafka là một hệ thống nhắn tin xuất bản - đăng ký phân tán và một hàng đợi mạnh mẽ có thể xử lý một lượng lớn dữ liệu và cho phép bạn chuyển các tin nhắn từ điểm cuối này đến điểm cuối khác.

Kafka thích hợp cho cả việc sử dụng tin nhắn ngoại tuyến và trực tuyến. Các tin nhắn của Kafka vẫn tồn tại trên đĩa và được sao chép trong cụm để ngăn mất dữ liệu.

Kafka được xây dựng dựa trên dịch vụ đồng bộ hóa ZooKeeper. Nó tích hợp rất tốt với Apache Storm và Spark để phân tích dữ liệu phát trực tuyến theo thời gian thực.

Những lợi ích của Kafka

Sau đây là một số lợi ích của Kafka:

  • Độ tin cậy - Kafka là hệ thống phân tán, phân vùng, nhân rộng và khả năng chịu lỗi cao.
  • Khả năng mở rộng - Hệ thống nhắn tin Kafka mở rộng quy mô dễ dàng mà không có thời gian chết (zeo downtime).
  • Tính bền - Kafka sử dụng "Nhật ký cam kết phân tán" có nghĩa là các tin nhắn vẫn tồn tại trên đĩa nhanh nhất có thể, do đó nó có tính bền.
  • Hiệu suất - Kafka có thông lượng cao cho cả việc xuất bản và đăng ký tin nhắn. Nó duy trì hiệu suất ổn định ngay cả khi nhiều TB tin nhắn được lưu trữ.

Kafka rất nhanh và đảm bảo không có thời gian chết và không mất dữ liệu.

Trường hợp sử dụng

Kafka có thể được sử dụng trong nhiều trường hợp. Một số trong số chúng được liệt kê dưới đây:

  • Nhắn tin - Kafka hoạt động tốt như một sự thay thế cho các message broker truyền thống hơn. So với hầu hết các hệ thống nhắn tin, Kafka có thông lượng tốt hơn, khả năng phân vùng, sao chép và khả năng chịu lỗi tích hợp, khiến nó trở thành một giải pháp tốt cho các ứng dụng xử lý tin nhắn quy mô lớn.
  • Số liệu - Kafka thường được sử dụng cho dữ liệu giám sát hoạt động. Điều này liên quan đến việc tổng hợp số liệu thống kê từ các ứng dụng phân tán để tạo ra nguồn cấp dữ liệu hoạt động tập trung.
  • Giải pháp tổng hợp nhật ký - Kafka có thể được sử dụng trong một tổ chức để thu thập nhật ký từ nhiều dịch vụ và cung cấp chúng ở định dạng chuẩn cho nhiều consumer.
  • Xử lý luồng - Các framework phổ biến như Storm và Spark Streaming đọc dữ liệu từ một chủ đề, xử lý chủ đề đó và ghi dữ liệu đã xử lý vào một chủ đề mới mà nó có sẵn cho người dùng và ứng dụng. Độ bền mạnh mẽ của Kafka cũng rất hữu ích trong bối cảnh xử lý luồng.
  • Event Sourcing - Event Sourcing là một phong cách thiết kế ứng dụng trong đó các thay đổi trạng thái được ghi lại dưới dạng một chuỗi hồ sơ theo thứ tự thời gian. Sự hỗ trợ của Kafka đối với dữ liệu nhật ký được lưu trữ rất lớn khiến nó trở thành một hệ thống backend tuyệt vời cho ứng dụng được xây dựng theo phong cách này.

Cần Kafka

Kafka là một nền tảng thống nhất để xử lý tất cả các nguồn cấp dữ liệu thời gian thực. Kafka hỗ trợ gửi tin nhắn có độ trễ thấp và đảm bảo khả năng chịu lỗi trong trường hợp máy bị lỗi.

Nó có khả năng xử lý một số lượng lớn consumer đa dạng. Kafka rất nhanh, thực hiện 2 triệu lần ghi/giây.

Kafka lưu giữ tất cả dữ liệu vào đĩa, về cơ bản có nghĩa là tất cả các lần ghi đều được chuyển vào bộ đệm trang của hệ điều hành (RAM). Điều này làm cho việc chuyển dữ liệu từ bộ đệm trang sang ổ cắm mạng rất hiệu quả.

Cài đặt Kafka

Sau đây là các bước để cài đặt Kafka trên máy tính của bạn.

Bước 1 - Xác minh cài đặt Java

Hy vọng rằng bạn đã cài đặt java trên máy tính của mình ngay bây giờ, vì vậy bạn chỉ cần xác minh nó bằng cách sử dụng lệnh sau.

$ java -version

Nếu java được cài đặt thành công trên máy của bạn, bạn có thể thấy phiên bản của Java đã cài đặt. Nếu như chưa cài đặt Java thì bạn hãy làm theo hướng dẫn bên dưới.

Bước 1.1 - Tải xuống JDK

Nếu Java chưa được tải xuống, vui lòng tải xuống phiên bản JDK mới nhất bằng cách truy cập liên kết sau và tải xuống phiên bản mới nhất.

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Hiện phiên bản mới nhất là JDK 8u 60 và tệp là “jdk-8u60-linux-x64.tar.gz”. Vui lòng tải tệp xuống máy của bạn.

Bước 1.2 - Giải nén tệp

Nói chung, các tệp tải xuống được lưu trữ trong thư mục download, hãy kiểm tra và giải nén bằng các lệnh sau.

$ cd /go/to/download/path
$ tar -zxf jdk-8u60-linux-x64.gz

Bước 1.3 - Di chuyển đến thư mục Opt

Để cung cấp java cho tất cả người dùng, hãy di chuyển thư mục java đã giải nén vào thư mục usr/local/java/.

$ su
password: (type password of root user)
$ mkdir /opt/jdk
$ mv jdk-1.8.0_60 /opt/jdk/

Bước 1.4 - Thiết lập đường dẫn

Để thiết lập đường dẫn và biến JAVA_HOME, hãy thêm các lệnh sau vào tệp ~/.bashrc.

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

Bây giờ áp dụng tất cả các thay đổi vào hệ thống đang chạy hiện tại.

$ source ~/.bashrc

Bước 1.5 - Java Alternatives

Sử dụng lệnh sau để thay đổi Java Alternatives.

update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_60/bin/java 100

Bây giờ xác minh java bằng lệnh xác minh (java -version) được giải thích trong Bước 1.

Bước 2 - Cài đặt ZooKeeper Framework

Bước 2.1 - Tải xuống ZooKeeper

Để cài đặt ZooKeeper framework trên máy của bạn, hãy truy cập liên kết sau và tải xuống phiên bản ZooKeeper mới nhất.

http://zookeeper.apache.org/releases.html

Hiện tại, phiên bản mới nhất của ZooKeeper là 3.7.0 (ZooKeeper-3.7.0.tar.gz).

Bước 2.2 - Giải nén tệp tar

Giải nén tệp tar bằng lệnh sau:

$ cd opt/
$ tar -zxf zookeeper-3.4.6.tar.gz
$ cd zookeeper-3.4.6
$ mkdir data

Bước 2.3 - Tạo tệp cấu hình

Mở Tệp cấu hình có tên conf/zoo.cfg và thiết lập tất cả các tham số sau để đặt làm điểm bắt đầu.

$ vi conf/zoo.cfg
tickTime=2000
dataDir=/path/to/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2

Sau khi tệp cấu hình đã được lưu thành công và quay trở lại thiết bị đầu cuối, bạn có thể khởi động máy chủ ZooKeeper.

Bước 2.4 - Khởi động máy chủ ZooKeeper

$ bin/zkServer.sh start

Sau khi thực hiện lệnh này, bạn sẽ nhận được phản hồi như hình dưới đây:

$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg
$ Starting zookeeper ... STARTED

Bước 2.5 - Khởi động CLI

$ bin/zkCli.sh

Sau khi gõ lệnh trên, bạn sẽ kết nối với máy chủ Zookeeper và sẽ nhận được phản hồi bên dưới.

Connecting to localhost:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type: None path:null
[zk: localhost:2181(CONNECTED) 0]

Bước 2.6 - Dừng máy chủ Zookeeper

Sau khi kết nối máy chủ và thực hiện tất cả các thao tác, bạn có thể dừng máy chủ Zookeeper bằng lệnh sau:

$ bin/zkServer.sh stop

Bây giờ bạn đã cài đặt thành công Java và ZooKeeper trên máy của mình. Chúng ta hãy xem các bước để cài đặt Apache Kafka.

Bước 3 - Cài đặt Apache Kafka

Chúng ta hãy tiếp tục với các bước sau để cài đặt Apache Kafka trên máy của bạn.

Bước 3.1 - Tải xuống Apache Kafka

Để cài đặt Apache Kafka trên máy của bạn, hãy nhấp vào liên kết dưới đây:

https://kafka.apache.org/downloads

Phiên bản mới nhất của Kafka hiện tại là 2.7.0. Bạn tải file cài đặt Apache Kafka về máy và tiến hành giải nén.

Bước 3.2 - Giải nén tệp tar

Giải nén tệp tar bằng lệnh sau:

$ cd opt/
$ tar -zxf kafka-2.7.0-src.tgz
$ cd kafka-2.7.0-src

Bây giờ bạn đã tải xuống phiên bản Kafka mới nhất trên máy của mình.

Bước 3.3 - Khởi động máy chủ

Bạn có thể khởi động máy chủ bằng cách đưa ra lệnh sau:

$ bin/kafka-server-start.sh config/server.properties

Sau khi máy chủ khởi động, bạn sẽ thấy phản hồi dưới đây trên màn hình của mình:

$ bin/kafka-server-start.sh config/server.properties
# [2016-01-02 15:37:30,410] INFO KafkaConfig values:
# request.timeout.ms = 30000
# log.roll.hours = 168
# inter.broker.protocol.version = 0.9.0.X
# log.preallocate = false
# security.inter.broker.protocol = PLAINTEXT
# …………………………………………….
# …………………………………………….

Bước 4 - Dừng máy chủ

Sau khi thực hiện tất cả các thao tác, bạn có thể dừng máy chủ bằng lệnh sau:

$ bin/kafka-server-stop.sh config/server.properties

Như vậy là chúng ta đã cài đặt Kafka thành công, chúng ta có thể tìm hiểu cách thực hiện các thao tác cơ bản trên Kafka trong chương tiếp theo.

Apache Kafka