Thứ năm, 28/03/2019 | 00:00 GMT+7

Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Debian 9

Backup dữ liệu Apache Kafka của bạn là một thực tiễn quan trọng sẽ giúp bạn khôi phục sau khi mất dữ liệu ngoài ý muốn hoặc dữ liệu xấu được thêm vào cụm do lỗi user . Kết xuất dữ liệu của dữ liệu cụm và chủ đề là một cách hiệu quả để thực hiện backup và phục hồi.

Nhập và di chuyển dữ liệu đã backup của bạn sang một server riêng biệt sẽ hữu ích trong các trường hợp bản sao Kafka của bạn không sử dụng được do lỗi phần cứng server hoặc mạng và bạn cần tạo một bản sao Kafka mới bằng dữ liệu cũ của bạn . Nhập và di chuyển dữ liệu đã backup cũng rất hữu ích khi bạn đang di chuyển version Kafka sang một server được nâng cấp hoặc hạ cấp do thay đổi trong việc sử dụng tài nguyên.

Trong hướng dẫn này, bạn sẽ backup , nhập và di chuyển dữ liệu Kafka của bạn trên một bản cài đặt Debian 9 duy nhất cũng như trên nhiều bản cài đặt Debian 9 trên các server riêng biệt. ZooKeeper là một thành phần quan trọng trong hoạt động của Kafka. Nó lưu trữ thông tin về trạng thái cụm như dữ liệu người tiêu dùng, dữ liệu phân vùng và trạng thái của các nhà broker khác trong cụm. Như vậy, bạn cũng sẽ backup dữ liệu của ZooKeeper trong hướng dẫn này.

Yêu cầu

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

  • Server Debian 9 có ít nhất 4GB RAM và user sudo không phải root được cài đặt theo hướng dẫn .
  • Server Debian 9 có cài đặt Apache Kafka, đóng role là nguồn của bản backup . Làm theo hướng dẫn Cách cài đặt Apache Kafka trên Debian 9 để cài đặt cài đặt Kafka của bạn, nếu Kafka chưa được cài đặt trên server nguồn.
  • OpenJDK 8 được cài đặt trên server . Để 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.
  • Tùy chọn cho Bước 7 - Một server Debian 9 khác có cài đặt Apache Kafka, hoạt động như đích của bản backup . Thực hiện theo liên kết bài viết trong yêu cầu trước đó để cài đặt Kafka trên server đích. Yêu cầu này chỉ bắt buộc nếu bạn đang di chuyển dữ liệu Kafka của bạn từ server này sang server khác. Nếu bạn muốn backup và nhập dữ liệu Kafka của bạn vào một server duy nhất, bạn có thể bỏ qua yêu cầu này.

Bước 1 - Tạo chủ đề thử nghiệm và thêm tin nhắn

Tin nhắn Kafka là đơn vị lưu trữ dữ liệu cơ bản nhất trong Kafka và là thực thể mà bạn sẽ xuất bản và đăng ký từ Kafka. Chủ đề Kafka giống như một containers cho một group các thông điệp liên quan. Khi bạn đăng ký một chủ đề cụ thể, bạn sẽ chỉ nhận được các tin nhắn đã được xuất bản cho chủ đề cụ thể đó. Trong phần này, bạn sẽ đăng nhập vào server mà bạn muốn backup ( server nguồn) và thêm chủ đề Kafka và thông báo để bạn có một số dữ liệu được điền cho bản backup .

Hướng dẫn này giả sử bạn đã cài đặt Kafka trong folder chính của user kafka ( /home/kafka/kafka ). Nếu cài đặt của bạn nằm trong một folder khác, hãy sửa đổi phần ~/ kafka trong các lệnh sau bằng đường dẫn cài đặt Kafka của bạn và đối với các lệnh trong suốt phần còn lại của hướng dẫn này.

SSH vào server nguồn bằng cách thực thi:

  • ssh sammy@source_server_ip

Chạy lệnh sau để đăng nhập với quyền user kafka :

  • sudo -iu kafka

Tạo một chủ đề có tên BackupTopic bằng cách sử dụng file tiện ích shell kafka-topics.sh trong folder bin của cài đặt Kafka của bạn, bằng lệnh :

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

Xuất bản chuỗi "Test Message 1" vào chủ đề BackupTopic bằng cách sử dụng tập lệnh tiện ích shell ~/ kafka /bin/kafka-console-producer.sh .

Nếu bạn muốn thêm tin nhắn bổ sung ở đây, bạn có thể làm như vậy ngay bây giờ.

  • echo "Test Message 1" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic BackupTopic > /dev/null

Tệp ~/ kafka /bin/kafka-console-producer.sh cho phép bạn xuất bản thư trực tiếp từ dòng lệnh. Thông thường, bạn sẽ xuất bản thư bằng thư viện khách Kafka từ bên trong chương trình của bạn , nhưng vì điều đó liên quan đến các cài đặt khác nhau cho các ngôn ngữ lập trình khác nhau, bạn có thể sử dụng shell script như một cách độc lập với ngôn ngữ để xuất bản thư trong quá trình thử nghiệm hoặc trong khi thực hiện các việc quản trị. Cờ --topic chỉ định chủ đề mà bạn sẽ xuất bản tin nhắn.

Tiếp theo, xác minh tập lệnh kafka-console-producer.sh đã xuất bản (các) thông báo bằng cách chạy lệnh sau:

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

Tập lệnh shell ~/ kafka /bin/kafka-console-consumer.sh khởi động trình tiêu dùng. Sau khi bắt đầu, nó sẽ đăng ký các tin nhắn từ chủ đề mà bạn đã xuất bản trong thông báo "Test Message 1" trong lệnh trước đó. --from-beginning trong lệnh 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. Nếu không bật cờ, chỉ những thông báo được xuất bản sau khi người tiêu dùng bắt đầu mới xuất hiện. Khi chạy lệnh, bạn sẽ thấy kết quả sau trong terminal:

Output
Test Message 1

Nhấn CTRL+C để dừng người tiêu dùng.

Bạn đã tạo một số dữ liệu thử nghiệm và xác minh dữ liệu đó vẫn tồn tại. Đến đây bạn có thể backup dữ liệu trạng thái trong phần tiếp theo.

Bước 2 - Backup dữ liệu trạng thái ZooKeeper

Trước khi backup dữ liệu Kafka thực tế, bạn cần backup trạng thái cụm được lưu trữ trong ZooKeeper.

ZooKeeper lưu trữ dữ liệu của nó trong folder được chỉ định bởi trường dataDir trong file cấu hình ~/ kafka /config/zookeeper.properties . Bạn cần đọc giá trị của trường này để xác định folder cần backup . Theo mặc định, dataDir trỏ đến / tmp/zookeeper . Nếu giá trị khác trong cài đặt của bạn, hãy thay thế / tmp/zookeeper bằng giá trị đó trong các lệnh sau.

Đây là kết quả ví dụ của file ~/ kafka /config/zookeeper.properties :

~ / kafka / config / zookeeper.properties
... ... ... # the directory where the snapshot is stored. dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181 # disable the per-ip limit on the number of connections since this is a non-production config maxClientCnxns=0 ... ... ... 

Đến đây bạn đã có đường dẫn đến folder , bạn có thể tạo một file lưu trữ nén chứa nội dung của nó. Các file lưu trữ được nén là một lựa chọn tốt hơn so với các file lưu trữ thông thường để tiết kiệm dung lượng đĩa. Chạy lệnh sau:

  • tar -czf /home/kafka/zookeeper-backup.tar.gz /tmp/zookeeper/*

tar: Removing leading / from member names kết quả của lệnh tar: Removing leading / from member names mà bạn có thể bỏ qua một cách an toàn.

Các cờ -c-z cho tar tạo một repository và áp dụng nén gzip cho repository . Cờ -f chỉ định tên của file lưu trữ nén kết quả , là zookeeper-backup.tar.gz trong trường hợp này.

Bạn có thể chạy ls trong folder hiện tại của bạn để xem zookeeper-backup.tar.gz như một phần của kết quả của bạn.

Đến đây bạn đã backup thành công dữ liệu ZooKeeper. Trong phần tiếp theo, bạn sẽ backup dữ liệu Kafka thực tế.

Bước 3 - Backup các chủ đề và tin nhắn của Kafka

Trong phần này, bạn sẽ backup folder dữ liệu của Kafka vào một file tar nén giống như bạn đã làm với ZooKeeper ở bước trước.

Kafka lưu trữ các chủ đề, thư và file nội bộ trong folder mà trường log.dirs chỉ định trong file cấu hình ~/ kafka /config/server.properties . Bạn cần đọc giá trị của trường này để xác định folder cần backup . Theo mặc định và trong cài đặt hiện tại của bạn, log.dirs trỏ đến /tmp/kafka-logs . Nếu giá trị khác trong cài đặt của bạn, hãy thay thế /tmp/kafka-logs trong các lệnh sau bằng giá trị chính xác.

Dưới đây là một ví dụ kết quả của file ~/ kafka /config/server.properties :

~ / kafka / config / server.properties
... ... ... ############################# Log Basics #############################  # A comma separated list of directories under which to store log files log.dirs=/tmp/kafka-logs  # The default number of log partitions per topic. More partitions allow greater # parallelism for consumption, but this will also result in more files across # the brokers. num.partitions=1  # The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. # This value is recommended to be increased for installations with data dirs located in RAID array. num.recovery.threads.per.data.dir=1 ... ... ... 

Đầu tiên, dừng dịch vụ Kafka để dữ liệu trong folder log.dirs ở trạng thái nhất quán khi tạo repository bằng tar . Để thực hiện việc này, hãy quay lại user không phải root của server của bạn bằng lệnh exit và sau đó chạy lệnh sau:

  • sudo systemctl stop kafka

Sau khi ngừng dịch vụ Kafka, hãy đăng nhập lại với quyền là user kafka của bạn với:

  • sudo -iu kafka

Cần phải dừng / khởi động các dịch vụ Kafka và ZooKeeper với quyền là user sudo không phải root của bạn vì trong yêu cầu cài đặt Apache Kafka, bạn đã hạn chế user kafka như một biện pháp bảo mật. Bước này trong yêu cầu vô hiệu hóa quyền truy cập sudo cho user kafka , dẫn đến các lệnh không thực thi được.

Bây giờ, tạo một file lưu trữ nén chứa nội dung của folder bằng cách chạy lệnh sau:

  • tar -czf /home/kafka/kafka-backup.tar.gz /tmp/kafka-logs/*

, bạn có thể bỏ qua kết quả của lệnh một cách an toàn ( tar: Removing leading / from member names ).

Bạn có thể chạy ls trong folder hiện tại để xem kafka-backup.tar.gz như một phần của kết quả .

Bạn có thể khởi động lại dịch vụ Kafka - nếu bạn không muốn khôi phục dữ liệu ngay lập tức - bằng lệnh exit , để chuyển sang user sudo không phải root của bạn, rồi chạy:

  • sudo systemctl start kafka

Đăng nhập lại với quyền là user kafka của bạn:

  • sudo -iu kafka

Bạn đã backup thành công dữ liệu Kafka. Đến đây bạn có thể chuyển sang phần tiếp theo, nơi bạn sẽ khôi phục dữ liệu trạng thái cụm được lưu trữ trong ZooKeeper.

Bước 4 - Khôi phục dữ liệu ZooKeeper

Trong phần này, bạn sẽ khôi phục dữ liệu trạng thái cụm mà Kafka tạo và quản lý nội bộ khi user thực hiện các thao tác như tạo chủ đề, thêm / bớt các node bổ sung, thêm và sử dụng thư. Bạn sẽ khôi phục dữ liệu về cài đặt nguồn hiện có của bạn bằng cách xóa folder dữ liệu ZooKeeper và khôi phục nội dung của file zookeeper-backup.tar.gz . Nếu bạn muốn khôi phục dữ liệu vào một server khác, hãy xem Bước 7.

Bạn cần dừng các dịch vụ Kafka và ZooKeeper để đề phòng các folder dữ liệu nhận dữ liệu không hợp lệ trong quá trình khôi phục.

Đầu tiên, dừng dịch vụ Kafka bằng lệnh exit , để chuyển sang user sudo không phải root của bạn, rồi chạy:

  • sudo systemctl stop kafka

Tiếp theo, dừng dịch vụ ZooKeeper:

  • sudo systemctl stop zookeeper

Đăng nhập lại với quyền là user kafka của bạn:

  • sudo -iu kafka

Sau đó, bạn có thể xóa folder dữ liệu cụm hiện có một cách an toàn bằng lệnh sau:

  • rm -r /tmp/zookeeper/*

Bây giờ khôi phục dữ liệu bạn đã backup ở Bước 2:

  • tar -C /tmp/zookeeper -xzf /home/kafka/zookeeper-backup.tar.gz --strip-components 2

Cờ -C yêu cầu tar thay đổi thành thư / tmp/zookeeper trước khi extract dữ liệu. Bạn chỉ định cờ --strip 2 để làm cho tar extract nội dung của repository trong / tmp/zookeeper / chính nó chứ không phải trong một folder khác (chẳng hạn như /tmp/zookeeper/tmp/zookeeper/ ) bên trong nó.

Bạn đã khôi phục dữ liệu trạng thái cụm thành công. Bây giờ, bạn có thể tiến hành quá trình khôi phục dữ liệu Kafka trong phần tiếp theo.

Bước 5 - Khôi phục dữ liệu Kafka

Trong phần này, bạn sẽ khôi phục dữ liệu Kafka đã backup vào cài đặt nguồn hiện có của bạn (hoặc server đích nếu bạn đã làm theo Bước 7 tùy chọn) bằng cách xóa folder dữ liệu Kafka và khôi phục file lưu trữ đã nén. Điều này sẽ cho phép bạn xác minh việc khôi phục hoạt động thành công.

Bạn có thể xóa folder dữ liệu Kafka hiện có một cách an toàn bằng lệnh sau:

  • rm -r /tmp/kafka-logs/*

Đến đây bạn đã xóa dữ liệu, cài đặt Kafka của bạn giống như một cài đặt mới không có chủ đề hoặc thông báo nào trong đó. Để khôi phục dữ liệu đã backup của bạn, hãy extract các file bằng lệnh:

  • tar -C /tmp/kafka-logs -xzf /home/kafka/kafka-backup.tar.gz --strip-components 2

Cờ -C yêu cầu tar thay đổi thành thư /tmp/kafka-logs trước khi extract dữ liệu. Bạn chỉ định cờ --strip 2 đảm bảo rằng nội dung của repository được extract trong /tmp/kafka-logs/ chính nó chứ không phải trong folder khác (chẳng hạn như /tmp/kafka-logs/kafka-logs/ ) bên trong nó.

Đến đây bạn đã extract dữ liệu thành công, bạn có thể khởi động lại các dịch vụ Kafka và ZooKeeper bằng lệnh exit , để chuyển sang user sudo không phải root của bạn, rồi thực hiện:

  • sudo systemctl start kafka

Bắt đầu dịch vụ ZooKeeper với:

  • sudo systemctl start zookeeper

Đăng nhập lại với quyền là user kafka của bạn:

  • sudo -iu kafka

Bạn đã khôi phục dữ liệu kafka , bạn có thể chuyển sang phần xác minh việc khôi phục thành công trong phần tiếp theo.

Bước 6 - Xác minh việc khôi phục

Để kiểm tra việc khôi phục dữ liệu Kafka, bạn sẽ sử dụng các tin nhắn từ chủ đề bạn đã tạo ở Bước 1.

Chờ vài phút để Kafka khởi động rồi thực hiện lệnh sau để đọc tin nhắn từ BackupTopic :

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

Nếu nhận được cảnh báo như sau, bạn cần đợi Kafka khởi động hoàn toàn:

Output
[2018-09-13 15:52:45,234] WARN [Consumer clientId=consumer-1, groupId=console-consumer-87747] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

Thử lại lệnh trước đó sau vài phút nữa hoặc chạy sudo systemctl restart kafka với quyền là user sudo không phải root của bạn. Nếu không có vấn đề gì trong quá trình khôi phục, bạn sẽ thấy kết quả sau:

Output
Test Message 1

Nếu không thấy thông báo này, bạn có thể kiểm tra xem mình có bỏ sót lệnh nào trong phần trước hay không và thực hiện chúng.

Đến đây bạn đã xác minh dữ liệu Kafka được khôi phục, điều này nghĩa là bạn đã backup và khôi phục thành công dữ liệu của bạn trong một lần cài đặt Kafka. Bạn có thể tiếp tục đến Bước 7 để xem cách di chuyển dữ liệu cụm và chủ đề sang cài đặt trong server khác.

Bước 7 - Di chuyển và khôi phục bản backup sang một server Kafka khác (Tùy chọn)

Trong phần này, bạn sẽ di chuyển dữ liệu đã backup từ server Kafka nguồn sang server Kafka đích. Để làm như vậy, trước tiên bạn sẽ sử dụng lệnh scp để tải các file tar.gz nén vào hệ thống local của bạn . Sau đó, bạn sẽ sử dụng scp để đẩy các file đến server đích. Khi các file có trong server đích, bạn có thể làm theo các bước đã sử dụng trước đó để khôi phục bản backup và xác minh quá trình di chuyển thành công.

Bạn đang download local các file backup và sau đó tải chúng lên server đích, thay vì sao chép trực tiếp từ nguồn của bạn sang server đích, vì server đích sẽ không có SSH key của server nguồn của bạn trong /home/ sammy /.ssh/authorized_keys file /home/ sammy /.ssh/authorized_keys và không thể kết nối đến và từ server nguồn. Tuy nhiên, máy local của bạn có thể kết nối với cả hai server , giúp bạn tiết kiệm thêm một bước cài đặt quyền truy cập SSH từ nguồn đến server đích.

Download các zookeeper-backup.tar.gzkafka-backup.tar.gz xuống máy local của bạn bằng cách thực hiện:

  • scp sammy@source_server_ip:/home/kafka/zookeeper-backup.tar.gz .

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

Output
zookeeper-backup.tar.gz 100% 68KB 128.0KB/s 00:00

Bây giờ hãy chạy lệnh sau để tải file kafka-backup.tar.gz xuống máy local của bạn:

  • scp sammy@source_server_ip:/home/kafka/kafka-backup.tar.gz .

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

Output
kafka-backup.tar.gz 100% 1031KB 488.3KB/s 00:02

Chạy ls trong folder hiện tại của máy local của bạn, bạn sẽ thấy cả hai file :

Output
kafka-backup.tar.gz zookeeper.tar.gz

Chạy lệnh sau để chuyển file zookeeper-backup.tar.gz đến /home/ kafka / của server đích:

  • scp zookeeper-backup.tar.gz sammy@destination_server_ip:/home/sammy/zookeeper-backup.tar.gz

Bây giờ hãy chạy lệnh sau để chuyển file kafka-backup.tar.gz đến /home/ kafka / của server đích:

  • scp kafka-backup.tar.gz sammy@destination_server_ip:/home/sammy/kafka-backup.tar.gz

Bạn đã tải các file backup lên server đích thành công. Vì các file nằm trong folder /home/ sammy / và không có quyền chính xác để user kafka truy cập, bạn có thể di chuyển file vào folder /home/ kafka / và thay đổi quyền của chúng.

SSH vào server đích bằng cách thực thi:

  • ssh sammy@destination_server_ip

Bây giờ di chuyển zookeeper-backup.tar.gz đến /home/ kafka / bằng cách thực thi:

  • sudo mv zookeeper-backup.tar.gz /home/sammy/zookeeper-backup.tar.gz

Tương tự, chạy lệnh sau để sao chép kafka-backup.tar.gz vào /home/ kafka / :

  • sudo mv kafka-backup.tar.gz /home/kafka/kafka-backup.tar.gz

Thay đổi chủ sở hữu của các file backup bằng cách chạy lệnh sau:

  • sudo chown kafka /home/kafka/zookeeper-backup.tar.gz /home/kafka/kafka-backup.tar.gz

Các lệnh mvchown trước đó sẽ không hiển thị bất kỳ kết quả nào.

Bây giờ các file backup đã có trong server đích tại đúng folder , hãy làm theo các lệnh được liệt kê trong Bước 4 đến Bước 6 của hướng dẫn này để khôi phục và xác minh dữ liệu cho server đích của bạn.

Kết luận

Trong hướng dẫn này, bạn đã backup , nhập và di chuyển các chủ đề và tin nhắn Kafka của bạn từ cả cài đặt và cài đặt giống nhau trên các server riêng biệt. Nếu bạn muốn tìm hiểu thêm về các việc quản trị hữu ích khác trong Kafka, bạn có thể tham khảo phần hoạt động trong tài liệu chính thức của Kafka.

Để lưu trữ các file đã backup , chẳng hạn như zookeeper-backup.tar.gzkafka-backup.tar.gz từ xa, bạn có thể khám phá DigitalOcean Spaces . Nếu Kafka là dịch vụ duy nhất chạy trên server của bạn, bạn cũng có thể khám phá các phương pháp backup khác như backup toàn bộ phiên bản .


Tags:

Các tin liên quan

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
Cách cài đặt Apache Tomcat 9 trên Debian 9
2018-09-05
Cách cài đặt Linux, Apache, MariaDB, PHP (LAMP) trên Debian 9
2018-09-04