Thứ sáu, 10/05/2019 | 00:00 GMT+7

Cách cài đặt Apache Kafka trên Debian 9

Apache Kafka là một nhà message broker phân tán phổ biến được thiết kế để xử lý hiệu quả dung lượng lớn dữ liệu thời gian thực. Một cụm Kafka không chỉ có khả năng mở rộng cao và khả năng chịu lỗi mà nó còn có thông lượng cao hơn nhiều so với các nhà message broker khác như ActiveMQRabbitMQ . Mặc dù nó thường được sử dụng như một hệ thống nhắn tin đăng ký / xuất bản , nhiều tổ chức cũng sử dụng nó để tổng hợp log vì nó cung cấp khả năng lưu trữ liên tục cho các tin nhắn đã xuất bản.

Hệ thống nhắn tin xuất bản / đăng ký cho phép một hoặc nhiều nhà production xuất bản tin nhắn mà không cần xem xét số lượng người tiêu dùng hoặc cách họ xử lý tin nhắn. Khách hàng đã đăng ký được thông báo tự động về các bản cập nhật và việc tạo các tin nhắn mới. Hệ thống này hiệu quả hơn và có khả năng mở rộng hơn các hệ thống mà khách hàng thăm dò ý kiến định kỳ để xác định xem có tin nhắn mới hay không.

Trong hướng dẫn này, bạn sẽ cài đặt và sử dụng Apache Kafka 2.1.1 trên Debian 9.

Yêu cầu

Để làm theo, bạn cần :

  • Một server Debian 9 và một user không phải root có quyền sudo. Thực hiện theo các bước được chỉ định trong hướng dẫn này nếu bạn chưa cài đặt user không phải root.
  • Ít nhất 4GB RAM trên server . Các cài đặt không có dung lượng RAM này có thể khiến dịch vụ Kafka không thành công, với máy ảo Java (JVM) đưa ra ngoại lệ “Hết bộ nhớ” trong khi khởi động.
  • OpenJDK 8 được cài đặt trên server của bạn. Để cài đặt version này, hãy làm theo các hướng dẫn sau về cài đặt các version cụ thể của OpenJDK. Kafka được viết bằng Java, vì vậy nó yêu cầu JVM; tuy nhiên, tập lệnh shell khởi động của nó có lỗi phát hiện version khiến nó không thể khởi động với các version JVM trên 8.

Bước 1 - Tạo user cho Kafka

Vì Kafka có thể xử lý các truy cập qua mạng, bạn nên tạo một user riêng cho nó. Điều này giảm thiểu thiệt hại cho máy Debian của bạn nếu server Kafka bị xâm phạm. Ta sẽ tạo một user kafka chuyên dụng trong bước này, nhưng bạn nên tạo một user không phải root khác để thực hiện các việc khác trên server này sau khi bạn cài đặt xong Kafka.

Đăng nhập với quyền là user sudo không phải root của bạn, hãy tạo một user có tên là kafka bằng lệnh useradd :

  • sudo useradd kafka -m

Cờ -m đảm bảo một folder chính sẽ được tạo cho user . Thư mục chính này, /home/kafka , sẽ hoạt động như folder không gian làm việc của ta để thực hiện các lệnh trong các phần bên dưới.

Đặt password bằng passwd :

  • sudo passwd kafka

Thêm user kafka vào group sudo bằng lệnh adduser , để nó có các quyền cần thiết để cài đặt các phụ thuộc của Kafka:

  • sudo adduser kafka sudo

User kafka của bạn hiện đã sẵn sàng. Đăng nhập vào account này bằng su :

  • su -l kafka

Bây giờ ta đã tạo user cụ thể cho Kafka, ta có thể chuyển sang download và extract các file binary Kafka.

Bước 2 - Download và extract Kafka Binaries

Hãy download và extract các file binary Kafka vào các folder chuyên dụng trong folder chính của user kafka của ta .

Để bắt đầu, hãy tạo một folder trong /home/kafka tên là Downloads để lưu trữ các file download của bạn:

  • mkdir ~/Downloads

Cài đặt curl bằng apt-get để bạn có thể download các file từ xa:

  • sudo apt-get update && sudo apt-get install -y curl

Sau khi cài đặt curl , hãy sử dụng nó để download các file binary Kafka:

  • curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

Tạo một folder có tên kafka và thay đổi thành folder này. Đây sẽ là folder cơ sở của cài đặt Kafka:

  • mkdir ~/kafka && cd ~/kafka

Extract file lưu trữ bạn đã download bằng lệnh tar :

  • tar -xvzf ~/Downloads/kafka.tgz --strip 1

Ta chỉ định cờ --strip 1 đảm bảo rằng nội dung của repository được extract trong ~/kafka/ chính nó chứ không phải trong folder khác (chẳng hạn như ~/kafka/kafka_ 2.11-2.1.1 / ) bên trong nó.

Bây giờ ta đã download và extract thành công các file binary , ta có thể chuyển sang cấu hình Kafka để cho phép xóa chủ đề.

Bước 3 - Cấu hình server Kafka

Hành vi mặc định của Kafka sẽ không cho phép ta xóa chủ đề , danh mục, group hoặc tên nguồn cấp dữ liệu mà các bài viết có thể được xuất bản. Để sửa đổi điều này, hãy chỉnh sửa file cấu hình.

Các tùy chọn cấu hình của Kafka được chỉ định trong server.properties . Mở file này bằng nano hoặc editor bạn quen dùng :

  • nano ~/kafka/config/server.properties

Hãy thêm một cài đặt cho phép ta xóa các chủ đề Kafka. Thêm phần sau vào cuối file :

~ / kafka / config / server.properties
delete.topic.enable = true 

Lưu file và thoát nano . Bây giờ ta đã cấu hình Kafka, ta có thể chuyển sang tạo các file đơn vị systemd để chạy và kích hoạt nó khi khởi động.

Bước 4 - Tạo file đơn vị Systemd và khởi động server Kafka

Trong phần này, ta sẽ tạo các file đơn vị systemd cho dịch vụ Kafka. Điều này sẽ giúp ta thực hiện các hành động dịch vụ phổ biến như bắt đầu, dừng và khởi động lại Kafka theo cách nhất quán với các dịch vụ Linux khác.

ZooKeeper là một dịch vụ mà Kafka sử dụng để quản lý cấu hình và trạng thái cụm của nó. Nó thường được sử dụng trong nhiều hệ thống phân tán như một thành phần tích hợp. Nếu bạn muốn biết thêm về nó, hãy truy cập tài liệu chính thức của ZooKeeper .

Tạo file đơn vị cho zookeeper :

  • sudo nano /etc/systemd/system/zookeeper.service

Nhập định nghĩa đơn vị sau vào file :

/etc/systemd/system/zookeeper.service
[Unit] Requires=network.target remote-fs.target After=network.target remote-fs.target  [Service] Type=simple User=kafka ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh Restart=on-abnormal  [Install] WantedBy=multi-user.target 

Phần [Unit] chỉ định rằng ZooKeeper yêu cầu mạng và hệ thống file phải sẵn sàng trước khi có thể khởi động.

Các [Service] phần quy định cụ thể rằng systemd nên sử dụng zookeeper-server-start.shzookeeper-server-stop.sh file shell để khởi động và dừng dịch vụ. Nó cũng chỉ định rằng ZooKeeper nên được khởi động lại tự động nếu nó thoát bất thường.

Tiếp theo, tạo file dịch vụ systemd cho kafka :

  • sudo nano /etc/systemd/system/kafka.service

Nhập định nghĩa đơn vị sau vào file :

/etc/systemd/system/kafka.service
[Unit] Requires=zookeeper.service After=zookeeper.service  [Service] Type=simple User=kafka ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1' ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh Restart=on-abnormal  [Install] WantedBy=multi-user.target 

Phần [Unit] chỉ định rằng file đơn vị này phụ thuộc vào zookeeper.service . Điều này sẽ đảm bảo zookeeper sẽ tự động khởi động khi dịch vụ kafka bắt đầu.

Các [Service] phần quy định cụ thể rằng systemd nên sử dụng kafka-server-start.shkafka-server-stop.sh file shell để khởi động và dừng dịch vụ. Nó cũng chỉ định rằng Kafka nên được khởi động lại tự động nếu nó thoát ra bất thường.

Bây giờ các đơn vị đã được xác định, hãy bắt đầu Kafka bằng lệnh sau:

  • sudo systemctl start kafka

Để đảm bảo server đã khởi động thành công, hãy kiểm tra log log cho đơn vị kafka :

  • sudo journalctl -u kafka

Bạn sẽ thấy kết quả tương tự như sau:

Output
Mar 23 13:31:48 kafka systemd[1]: Started kafka.service.

Đến đây bạn có một server Kafka đang nghe trên cổng 9092 .

Trong khi ta đã khởi động dịch vụ kafka , nếu ta khởi động lại server của bạn , nó sẽ không được khởi động tự động. Để bật kafka khi khởi động server , hãy chạy:

  • sudo systemctl enable kafka

Bây giờ ta đã bắt đầu và kích hoạt các dịch vụ, hãy kiểm tra cài đặt.

Bước 5 - Kiểm tra cài đặt

Hãy xuất bản và sử dụng thông báo “Hello World” đảm bảo server Kafka đang hoạt động chính xác. Việc xuất bản tin nhắn trong Kafka yêu cầu:

  • Một nhà production , cho phép xuất bản các bản ghi và dữ liệu cho các chủ đề.
  • Người tiêu dùng , đọc tin nhắn và dữ liệu từ các chủ đề.

Trước tiên, hãy tạo một chủ đề có tên TutorialTopic bằng lệnh :

  • ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

Bạn có thể tạo trình production từ dòng lệnh bằng cách sử dụng tập lệnh kafka-console-producer.sh . Nó yêu cầu tên server , cổng và tên chủ đề của server Kafka làm đối số.

Xuất bản chuỗi "Hello, World" lên chủ đề TutorialTopic bằng lệnh :

  • echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Tiếp theo, bạn có thể tạo khách hàng Kafka bằng cách sử dụng tập lệnh kafka-console-consumer.sh . Nó yêu cầu tên server và cổng của server ZooKeeper, cùng với tên chủ đề làm đối số.

Lệnh sau sử dụng các thông báo từ TutorialTopic . Lưu ý việc sử dụng cờ --from-beginning , cho phép sử dụng các thông báo đã được xuất bản trước khi người tiêu dùng bắt đầu:

  • ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

Nếu không có vấn đề về cấu hình, bạn sẽ thấy Hello, World trong terminal của bạn :

Output
Hello, World

Tập lệnh sẽ tiếp tục chạy, chờ thêm tin nhắn được xuất bản cho chủ đề. Hãy mở một terminal mới và bắt đầu nhà production xuất bản thêm một vài thông báo. Bạn có thể thấy tất cả chúng trong kết quả của người tiêu dùng.

Khi bạn kiểm tra xong, hãy nhấn CTRL+C để dừng tập lệnh user . Bây giờ ta đã kiểm tra cài đặt, hãy chuyển sang cài đặt KafkaT.

Bước 6 - Cài đặt KafkaT (Tùy chọn)

KafkaT là một công cụ từ Airbnb giúp bạn dễ dàng hơn trong việc xem chi tiết về cụm Kafka của bạn và thực hiện các việc quản trị nhất định từ dòng lệnh. Bởi vì nó là một viên ngọc Ruby, bạn cần Ruby để sử dụng nó. Bạn cũng cần gói build-essential để có thể chế tạo các viên ngọc khác mà nó phụ thuộc vào. Cài đặt chúng bằng apt :

  • sudo apt install ruby ruby-dev build-essential

Đến đây bạn có thể cài đặt KafkaT bằng lệnh gem:

  • sudo gem install kafkat

KafkaT sử dụng .kafkatcfg làm file cấu hình để xác định cài đặt và đăng nhập các folder của server Kafka của bạn. Nó cũng phải có một mục trỏ KafkaT đến version ZooKeeper của bạn.

Tạo một file mới có tên .kafkatcfg :

  • nano ~/.kafkatcfg

Thêm các dòng sau để chỉ định thông tin cần thiết về server Kafka và version Zookeeper của bạn:

~ / .kafkatcfg
{   "kafka_path": "~/kafka",   "log_path": "/tmp/kafka-logs",   "zk_path": "localhost:2181" } 

Đến đây bạn đã sẵn sàng để sử dụng KafkaT. Để bắt đầu, đây là cách bạn sẽ sử dụng nó để xem chi tiết về tất cả các phân vùng Kafka:

  • kafkat partitions

Bạn sẽ thấy kết quả sau:

Output
Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

Bạn sẽ thấy TutorialTopic , cũng như __consumer_offsets , một chủ đề nội bộ được Kafka sử dụng để lưu trữ thông tin liên quan đến khách hàng. Bạn có thể bỏ qua các dòng bắt đầu bằng __consumer_offsets một cách an toàn.

Để tìm hiểu thêm về KafkaT, hãy tham khảo kho lưu trữ GitHub của nó.

Bước 7 - Cài đặt một cụm đa nút (Tùy chọn)

Nếu bạn muốn tạo một cụm đa broker sử dụng nhiều máy Debian 9 hơn, bạn nên lặp lại Bước 1, Bước 4 và Bước 5 trên mỗi máy mới. Ngoài ra, bạn nên áp dụng các thay đổi sau trong file server.properties cho mỗi:

  • Giá trị của thuộc tính broker.id phải được thay đổi sao cho nó là duy nhất trong toàn bộ cụm. Thuộc tính này xác định duy nhất từng server trong cụm và có thể có bất kỳ chuỗi nào làm giá trị của nó. Ví dụ: "server1" , "server2" , v.v.

  • Giá trị của thuộc tính zookeeper.connect nên được thay đổi sao cho tất cả các node đều trỏ đến cùng một version ZooKeeper. Thuộc tính này chỉ định địa chỉ của version ZooKeeper và tuân theo định dạng <HOSTNAME/IP_ADDRESS>:<PORT> . Ví dụ: " 203.0.113.0 :2181" , " 203.0.113.1 :2181" v.v.

Nếu bạn muốn có nhiều version ZooKeeper cho cụm của bạn , giá trị của thuộc tính zookeeper.connect trên mỗi nút phải là một chuỗi giống hệt nhau, được phân tách bằng dấu phẩy liệt kê địa chỉ IP và số cổng của tất cả các version ZooKeeper.

Bước 8 - Hạn chế user Kafka

Bây giờ tất cả cài đặt đã hoàn tất, bạn có thể xóa quyền administrator của user kafka . Trước khi bạn làm như vậy, hãy đăng xuất và đăng nhập lại với quyền là bất kỳ user sudo không phải root nào khác. Nếu bạn vẫn đang chạy cùng một phiên shell mà bạn đã bắt đầu hướng dẫn này, chỉ cần nhập exit .

Xóa user kafka khỏi group sudo:

  • sudo deluser kafka sudo

Để cải thiện hơn nữa bảo mật cho server Kafka của bạn, hãy khóa password của user kafka bằng lệnh passwd . Điều này đảm bảo không ai có thể trực tiếp đăng nhập vào server bằng account này:

  • sudo passwd kafka -l

Đến đây, chỉ user root hoặc sudo mới có thể đăng nhập bằng kafka bằng lệnh lệnh sau:

  • sudo su - kafka

Trong tương lai, nếu bạn muốn mở khóa nó, sử dụng passwd với -u tùy chọn:

  • sudo passwd kafka -u

Đến đây bạn đã hạn chế thành công quyền administrator của user kafka .

Kết luận

Đến đây bạn có Apache Kafka đang chạy an toàn trên server Debian của bạn . Bạn có thể sử dụng nó trong các dự án của bạn bằng cách tạo ra các nhà production và người tiêu dùng Kafka bằng các ứng dụng khách Kafka , có sẵn cho hầu hết các ngôn ngữ lập trình. Để tìm hiểu thêm về Kafka, bạn cũng có thể tham khảo tài liệu của nó.


Tags:

Các tin liên quan

Cách cài đặt Apache Kafka trên Ubuntu 18.04
2019-05-10
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Debian 9
2019-03-28
Cách cài đặt Apache Kafka trên CentOS 7
2019-03-27
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên CentOS 7
2019-03-25
Cách cài đặt và cấu hình Apache ZooKeeper Cluster trên Ubuntu 18.04
2019-01-03
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Ubuntu 18.04
2018-12-20
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 9
2018-09-07
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 9
2018-09-07
Cách cài đặt web server Apache trên Debian 9
2018-09-05
Cách bảo mật Apache bằng Let's Encrypt trên Debian 9
2018-09-05