Cách cài đặt Apache Kafka trên Debian 10
Apache Kafka là dịch vụ message phân tán phổ biến được thiết kế để xử lý dung lượng lớn dữ liệu thời gian thực. Một cụm Kafka có khả năng mở rộng và khả năng chịu lỗi cao, đồng thời cũng có thông lượng cao hơn nhiều so với các nhà message broker khác như ActiveMQ và RabbitMQ . 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à cấu hình Apache Kafka 2.1.1 một cách an toàn trên server Debian 10, sau đó kiểm tra cài đặt của bạn bằng cách tạo và sử dụng thông báo Hello World
. Sau đó, bạn sẽ tùy chọn cài đặt KafkaT để giám sát Kafka và cài đặt một cụm đa nút Kafka.
Yêu cầu
Để làm theo, bạn cần :
- Một server Debian 10 với ít nhất 4GB RAM và một user không phải root có quyền sudo. Làm theo các bước được chỉ định trong hướng dẫn Cài đặt Server Ban đầu cho Debian 10 nếu bạn chưa cài đặt user không phải root.
- OpenJDK 11 đã được cài đặt trên server . Để cài đặt version này, hãy làm theo hướng dẫn trong Cách cài đặt Java với Apt trên Debian 10 khi cài đặt các version cụ thể của OpenJDK. Kafka được viết bằng Java nên nó yêu cầu JVM.
Lưu ý: Các bản cài đặt không có 4GB RAM có thể khiến dịch vụ Kafka không thành công, với máy ảo Java (JVM) đưa Out Of Memory
ngoại lệ Out Of Memory
khi khởi động.
Bước 1 - Tạo user cho Kafka
Vì Kafka có thể xử lý các truy cập qua mạng, nên cách tốt nhất là 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. Bạn sẽ tạo kafka user riêng trong bước này.
Đăng nhập với quyền user sudo không phải root của bạn, tạo user có tên 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 bạn để thực hiện các lệnh sau này.
Đặt password bằng passwd
:
- sudo passwd kafka
Nhập password bạn muốn sử dụng cho user này.
Tiếp theo, 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
Đến đây bạn đã tạo user cụ thể cho Kafka, bạn có thể chuyển sang download và extract các file binary Kafka.
Bước 2 - Download và extract Kafka Binaries
Trong bước này, bạn sẽ 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 bạn.
Để 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
Tiếp theo, 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 curl
Khi được yêu cầu , hãy nhập Y
để xác nhận download curl
.
Sau khi cài đặt curl
, hãy sử dụng nó để download các file binary Kafka:
- curl "https://archive.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
Bạn đã chỉ định cờ --strip 1
đảm bảo nội dung của repository được extract trong ~/kafka/
chính nó chứ không phải trong một folder khác bên trong nó, chẳng hạn như ~/kafka/kafka_ 2.12-2.1.1 /
.
Đến đây bạn đã download và extract thành công các file binary , bạn 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, bạn sẽ 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 dòng được đánh dấu sau vào cuối file :
... group.initial.rebalance.delay.ms delete.topic.enable = true
Lưu file và thoát nano
. Đến đây bạn đã cấu hình Kafka, bạn có thể tạo các unit file systemd
để chạy và bật Kafka khi khởi động.
Bước 4 - Tạo unit file Systemd và khởi động server Kafka
Trong phần này, bạn sẽ tạo các unit file systemd
cho dịch vụ Kafka. Điều này sẽ giúp bạn 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 các hệ thống phân tán như một thành phần tích hợp. Trong hướng dẫn này, bạn sẽ sử dụng Zookeeper để quản lý các khía cạnh này của Kafka. 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 .
Đầu tiên, tạo unit file cho zookeeper
:
- sudo nano /etc/systemd/system/zookeeper.service
Nhập định nghĩa đơn vị sau vào file :
[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 kết nối mạng và để hệ thống file 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.sh
và zookeeper-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 :
[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 unit file 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.sh
và kafka-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ả giống như sau :
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
, đây là cổng mặc định cho Kafka.
Bạn đã khởi động dịch vụ kafka
, nhưng nếu bạn khởi động lại server , nó sẽ chưa được khởi động tự động. Để bật kafka
khi khởi động server , hãy chạy:
- sudo systemctl enable kafka
Đến đây bạn đã bắt đầu và bật các dịch vụ, đã đến lúc 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
--broker-list
xác định danh sách các nhà message broker để gửi tin nhắn đến, trong trường hợp này là localhost:9092
. --topic
chỉ định chủ đề là TutorialTopic
.
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 và 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
--bootstrap-server
cung cấp danh sách các lần xâm nhập vào cụm Kafka. Trong trường hợp này, bạn đang sử dụng localhost:9092
.
Bạn sẽ thấy Hello, World
trong terminal :
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. Nếu bạn muốn tìm hiểu thêm về cách sử dụng Kafka, hãy xem tài liệu Kafka chính thức .
Khi bạn kiểm tra xong, hãy nhấn CTRL+C
để dừng tập lệnh user . Đến đây bạn đã kiểm tra cài đặt, bạn có thể chuyển sang cài đặt KafkaT để quản lý cụm Kafka của bạn tốt hơn.
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 CFLAGS=-Wno-error=format-overflow gem install kafkat
Tùy chọn CFLAGS=-Wno-error=format-overflow
vô hiệu hóa các cảnh báo tràn định dạng và là bắt buộc đối với đá quý ZooKeeper, là một phần phụ thuộc của 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:
{ "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:
Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ...
Kết quả này hiển thị 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ó.
Đến đây bạn đã cài đặt KafkaT, bạn có thể tùy chọn cài đặt Kafka trên một cụm server Debian 10 để tạo thành một cụm nhiều nút.
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 bằng cách sử dụng nhiều server Debian 10 hơn, hãy 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, hãy áp dụng các thay đổi sau trong file ~/kafka/config/server.properties
cho mỗi:
-
Thay đổi giá trị của thuộc tính
broker.id
để 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., sẽ hữu ích làm số nhận dạng. -
Thay đổi giá trị của
zookeeper.connect
tài sản đó mà tất cả các node trỏ đến dụ Zookeeper cùng. 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>
. Đối với hướng dẫn này, bạn sẽ sử dụngyour_first_server_IP :2181
, thay thếyour_first_server_IP
bằng địa chỉ IP của server Debian 10 mà bạn đã cài đặt .
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.
Lưu ý: Nếu bạn đã kích hoạt firewall trên server Debian 10 có cài đặt Zookeeper, hãy đảm bảo mở cổng 2181
để cho phép các yêu cầu đến từ các node khác trong cụm.
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 Apache Kafka .
Các tin liên quan
Cách sử dụng Ansible để cài đặt và thiết lập Apache trên Ubuntu 18.042019-12-06
Cách bảo mật Apache bằng Let's Encrypt trên FreeBSD 12.0
2019-11-08
Cách cài đặt Apache Tomcat 9 trên Debian 10
2019-10-24
Cách cấu hình báo cáo MTA-STS và TLS cho miền của bạn bằng Apache trên Ubuntu 18.04
2019-09-06
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 10
2019-08-22
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 10
2019-07-22
Cách cài đặt web server Apache trên Debian 10
2019-07-19
Cách cấu hình Apache HTTP với Sự kiện MPM và PHP-FPM trên FreeBSD 12.0
2019-07-12
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 12.0
2019-06-28
Cách cài đặt web server Apache trên CentOS 7
2019-05-29