16/09/2018, 13:11

Làm thế nào để cài đặt Apache Kafka trên Ubuntu 18.04

_Tác giả đã chọn Quỹ nguồn mở và miễn phí để nhận khoản đóng góp như một phần của Viết cho DOnations chương trình._ Giới thiệu Apache Kafka là một nhà môi giới thông điệp được phân phối phổ biến được thiết kế để xử lý hiệu quả khối lượng lớn dữ liệu thời gian thực. Một cụm Kafka không chỉ có ...

_Tác giả đã chọn Quỹ nguồn mở và miễn phí để nhận khoản đóng góp như một phần của Viết cho DOnations chương trình._

Giới thiệu

Apache Kafka là một nhà môi giới thông điệp được phân phối phổ biến được thiết kế để xử lý hiệu quả khối 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à còn có thông lượng cao hơn nhiều so với các nhà môi giới thông điệp khác như ActiveMQ và RabbitMQ. Mặc dù nó thường được sử dụng như một theo dõi công khai hệ thống nhắn tin, rất nhiều tổ chức cũng sử dụng nó để tổng hợp nhật ký vì nó cung cấp lưu trữ liên tục cho các thư đã 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à sản xuất xuất bản thư mà không xem xét số lượng người tiêu dùng hoặc cách họ xử lý thư. 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 tin nhắn mới. Hệ thống này hiệu quả hơn và có thể mở rộng hơn các hệ thống mà tại đó khách hàng thăm dò đị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 1.1.0 trên Ubuntu 18.04.

Điều kiện tiên quyết

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

  • Một máy chủ Ubuntu 18.04 và một người dùng không phải root với quyền sudo. Làm theo các bước được chỉ định trong hướng dẫn nếu bạn không thiết lập người dùng không phải root.
  • Ít nhất 4GB RAM trên máy chủ. Các bản cài đặt không có RAM này có thể khiến dịch vụ Kafka bị lỗi, với Máy ảo Java (JVM) ném ngoại lệ "Out Of Memory" trong khi khởi động.
  • OpenJDK 8 được cài đặt trên máy chủ của bạn. Để cài đặt phiên bản này, hãy làm theo những hướng dẫn này về cài đặt các phiên bản OpenJDK cụ thể. Kafka được viết bằng Java, vì vậy nó đòi hỏi một JVM; tuy nhiên, script shell khởi động của nó có lỗi phát hiện phiên bản khiến cho nó không khởi động được với các phiên bản JVM trên 8.

Bước 1 - Tạo người dùng cho Kafka

Vì Kafka có thể xử lý các yêu cầu qua mạng, bạn nên tạo một người dùng chuyên dụng cho nó. Điều này giảm thiểu thiệt hại cho máy Ubuntu của bạn nếu máy chủ Kafka bị xâm phạm. Chúng tôi sẽ tạo ra một kafka người dùng trong bước này, nhưng bạn nên tạo một người dùng không phải root khác để thực hiện các tác vụ khác trên máy chủ này khi bạn đã thiết lập xong Kafka.

Đăng nhập với tư cách người dùng không phải root của bạn, tạo một người dùng được gọi là kafka với useradd chỉ huy:

sudo useradd kafka -m

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

Đặt mật khẩu bằng passwd:

sudo passwd kafka

Thêm kafka người dùng đến sudo nhóm với adduser lệnh, để nó có các đặc quyền cần thiết để cài đặt các phụ thuộc của Kafka:

sudo adduser kafka sudo

Của bạn kafka người dùng đã sẵn sàng. Đăng nhập vào tài khoản này bằng su:

su -l kafka

Bây giờ chúng ta đã tạo ra người dùng Kafka cụ thể, chúng ta có thể chuyển sang tải xuống và giải nén các tệp nhị phân Kafka.

Bước 2 - Tải xuống và giải nén Kafka Binaries

Hãy tải xuống và trích xuất các tệp nhị phân Kafka vào các thư mục chuyên dụng trong kafka thư mục chính của người dùng.

Để bắt đầu, hãy tạo thư mục trong /home/kafka gọi là Downloads để lưu trữ nội dung tải xuống của bạn:

mkdir ~/Downloads

Sử dụng curl để tải xuống tệp nhị phân Kafka:

curl "http://www-eu.apache.org/dist/kafka/1.1.0/kafka_2.12-1.1.0.tgz" -o ~/Downloads/kafka.tgz

Tạo thư mục có tên kafka và thay đổi thư mục này. Đây sẽ là thư mục cơ bản của bản cài đặt Kafka:

mkdir ~/kafka && cd ~/kafka

Giải nén tệp lưu trữ bạn đã tải xuống bằng cách sử dụng tar chỉ huy:

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

Chúng tôi chỉ định --strip 1 gắn cờ để đảm bảo rằng nội dung của tệp nén được trích xuất ~/kafka/ chính nó và không nằm trong một thư mục khác (chẳng hạn như ~/kafka/kafka_2.12-1.1.0/) bên trong nó.

Bây giờ chúng tôi đã tải xuống và trích xuất các tệp nhị phân thành công, chúng tôi có thể di chuyển cấu hình sang Kafka để cho phép xóa chủ đề.

Bước 3 - Cấu hình máy chủ Kafka

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

Các tùy chọn cấu hình của Kafka được xác định trong server.properties. Mở tệp này bằng nano hoặc trình chỉnh sửa yêu thích của bạn:

nano ~/kafka/config/server.properties

Hãy thêm một thiết lập cho phép chúng ta xóa các chủ đề Kafka. Thêm phần sau vào cuối tệp:

~/kafka/config/server.properties

delete.topic.enable = true

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

Bước 4 - Tạo tập tin Systemd Unit và khởi động máy chủ Kafka

Trong phần này, chúng ta sẽ tạo tệp đơn vị systemd cho dịch vụ Kafka. Điều này sẽ giúp chúng tôi 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 phù hợp 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ý trạng thái cluster và cấu hình 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 không thể tách rời. Nếu bạn muốn biết thêm về nó, hãy ghé thăm quan chức Tài liệu Zookeeper.

Tạo tệp đơn vị cho zookeeper:

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

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

/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

Các [Unit] phần xác định rằng Zookeeper yêu cầu mạng và hệ thống tập tin phải sẵn sàng trước khi nó có thể bắt đầu.

Các [Service] phần chỉ định rằng systemd nên sử dụng zookeeper-server-start.sh và zookeeper-server-stop.sh các tệp shell để bắt đầu 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 tệp dịch vụ systemd cho kafka:

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

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

/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

Các [Unit] phần chỉ định rằng tệp đơn vị này phụ thuộc vào zookeeper.service. Điều này sẽ đảm bảo rằng zookeeper được bắt đầu tự động khi kafa dịch vụ bắt đầu.

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

Bây giờ các đơn vị đã được xác định, hãy khởi động Kafka bằng lệnh sau:

sudo systemctl start kafka

Để đảm bảo rằng máy chủ đã bắt đầu thành công, hãy kiểm tra nhật ký nhật ký cho kafka đơn vị:

journalctl -u kafka

Bạn sẽ thấy đầu ra tương tự như sau:

OutputJul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

Bây giờ bạn có máy chủ Kafka đang nghe trên cổng 9092.

Trong khi chúng tôi đã bắt đầu kafka dịch vụ, nếu chúng ta khởi động lại máy chủ, nó sẽ không được khởi động tự động. Để bật kafka trên máy chủ khởi động, chạy:

sudo systemctl enable kafka

Bây giờ chúng 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à tiêu thụ "Chào thế giới" để đảm bảo máy chủ Kafka hoạt động chính xác. Xuất bản tin nhắn trong Kafka yêu cầu:

  • A nhà sản xuất, cho phép xuất bản hồ sơ và dữ liệu cho các chủ đề.
  • A khách hàng, đọc tin nhắn và dữ liệu từ các chủ đề.

Đầu tiên, tạo chủ đề có tên TutorialTopic bằng cách gõ:

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

Bạn có thể tạo một nhà sản xuất từ ​​dòng lệnh bằng cách sử dụng kafka-console-producer.sh kịch bản. Nó trông đợi tên máy chủ, cổng và tên chủ đề của máy chủ Kafka làm đối số.

Xuất bản chuỗi "Hello, World" đến TutorialTopic chủ đề bằng cách gõ:

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 người tiêu dùng Kafka bằng cách sử dụng kafka-console-consumer.sh kịch bản. Nó trông đợi tên máy chủ và cổng máy chủ của ZooKeeper, cùng với tên chủ đề làm đối số.

Lệnh sau tiêu thụ thư từ TutorialTopic. Lưu ý việc sử dụng --from-beginning cờ, cho phép tiêu thụ thư đượ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 thiết bị đầu cuối của bạn:

OutputHello, World

Tập lệnh sẽ tiếp tục chạy, chờ đợi nhiều thông báo được xuất bản lên chủ đề. Vui lòng mở một thiết bị đầu cuối mới và bắt đầu một nhà sản xuất để xuất bản thêm vài tin nhắn nữa. Bạn sẽ có thể thấy tất cả chúng trong đầu ra của người tiêu dùng.

Khi bạn hoàn thành kiểm tra, nhấn CTRL+C để ngăn chặn tập lệnh của người tiêu dùng. Bây giờ chúng ta đã thử nghiệm cài đặt, hãy tiếp tục 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 xem chi tiết hơn về cụm Kafka của bạn và thực hiện các tác vụ 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 sẽ cần Ruby để sử dụng nó. Bạn cũng sẽ cần build-essential gói để có thể xây dựng các loại đá quý 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

Bây giờ bạn có thể cài đặt KafkaT bằng cách sử dụng lệnh gem:

sudo gem install kafkat

KafkaT sử dụng .kafkatcfg làm tệp cấu hình để xác định thư mục cài đặt và nhật ký của máy chủ Kafka của bạn. Nó cũng sẽ có một mục trỏ KafkaT vào thể hiện ZooKeeper của bạn.

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

nano ~/.kafkatcfg

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

~/.kafkatcfg

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

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:

OutputTopic                 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 một cách an toàn các dòng bắt đầu bằng __consumer_offsets.

Để tìm hiểu thêm về KafkaT, hãy tham khảo Kho lưu trữ GitHub.

Bước 7 - Thiết lập một cụm nhiều nút (tùy chọn)

Nếu bạn muốn tạo một cụm multi-broker bằng cách sử dụng nhiều máy Ubuntu 18.04, 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 thực hiện các thay đổi sau trong server.properties tệp cho mỗi:

  • Giá trị của broker.id tài sản nên được thay đổi sao cho nó là duy nhất trong suốt cụm. Thuộc tính này xác định duy nhất mỗi máy chủ 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 zookeeper.connect tài sản nên được thay đổi sao cho tất cả các nút trỏ đến cùng một cá thể ZooKeeper. Thuộc tính này chỉ định địa chỉ của cá thể Zookeeper và làm theo <HOSTNAME/IP_ADDRESS>:<PORT> định dạng. Ví dụ, "203.0.113.0:2181", "203.0.113.1:2181" v.v.

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

Bước 8 - Hạn chế người dùng Kafka

Bây giờ tất cả các cài đặt đã hoàn tất, bạn có thể xóa kafka đặc quyền quản trị viên của người dùng. Trước khi bạn làm như vậy, hãy đăng xuất và đăng nhập lại như bất kỳ người dùng 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 trình bao, bạn đã bắt đầu hướng dẫn này, chỉ cần gõ exit.

Gỡ bỏ kafka người dùng từ nhóm sudo:

sudo deluser kafka sudo

Để cải thiện hơn nữa tính bảo mật của máy chủ Kafka, hãy khóa kafka mật khẩu của người dùng bằng cách sử dụng passwd chỉ huy. Điều này đảm bảo rằng không ai có thể đăng nhập trực tiếp vào máy chủ bằng tài khoản này:

sudo passwd kafka -l

Tại thời điểm này, chỉ root hoặc người dùng sudo mới có thể đăng nhập kafka bằng cách nhập vào lệnh sau:

sudo su - kafka

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

sudo passwd kafka -u

Bạn đã giới hạn thành công kafka đặc quyền quản trị viên của người dùng.

Phần kết luận

Bây giờ bạn đã có Apache Kafka chạy an toàn trên máy chủ Ubuntu của bạn. Bạn có thể tận dụng nó trong các dự án của bạn bằng cách tạo ra các nhà sản xuất và người tiêu dùng Kafka bằng cách sử dụng Khách hàng của 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.

0