Thank you for reading this post, don't forget to subscribe!
Apache Kafka – это популярный распределённый брокер сообщений, предназначенный для обработки больших объемов данных в режиме реального времени. Кластер Kafka обладает не только высокой масштабируемостью и отказоустойчивостью, но также имеет гораздо более высокую пропускную способность по сравнению с другими брокерами сообщений (как ActiveMQ и RabbitMQ). Как правило, Apache Kafka используется в качестве системы обмена сообщениями pub/sub, однако многие организации используют его для логирования, потому что он обеспечивает постоянное хранение опубликованных сообщений.
Система обмена сообщениями pub/sub позволяет публиковать сообщения без учета количества подписчиков или способов их обработки. Подписанные клиенты автоматически уведомляются об обновлениях и появлении новых сообщений. Эта система более эффективна и масштабируема, чем те системы, в которых клиенты проводят периодическую проверку новых сообщений.
Требования
Centos7
4Gb оперативки Нехватка объема RAM может привести к сбою сервера Kafka, при этом Java virtual machine (JVM) выдает «Out Of Memory» во время запуска.
OpenJDK на сервере Kafka написан на Java, поэтому для его работы требуется JVM; однако в его сценарии запуска есть ошибка обнаружения версий, из-за которой он не работает с версиями JVM выше 8.
-
Установим openjdk
Чтобы установить OpenJDK 7 JRE, введите команду:
yum install java-1.7.0-openjdk
Чтобы установить OpenJDK 7 JDK, запустите команду:
yum install java-1.7.0-openjdk-devel
Установка Oracle Java 8 JRE
Примечание: Чтобы установить другой релиз Oracle Java 8 JRE, посетите страницу загрузок Oracle Java 8 JRE, примите лицензию, а затем скопируйте ссылку на пакет .rpm. Используйте эту ссылку в команде wget.
Откройте домашний каталог и загрузите в него Oracle Java 8 JRE RPM:
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
«http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jre-8u60-linux-x64.rpm»
Установите RPM при помощи следующей команды:
sudo yum localinstall jre-8u60-linux-x64.rpm
Примечание: Откорректируйте имя файла, чтобы установить другую версию Java.
Теперь Java установлена в /usr/java/jdk1.8.0_60/jre/bin/java и связана с /usr/bin/java.
Удалите архив:
rm ~/jre-8u60-linux-x64.rpm
Установка Oracle Java 8 JDK
Примечание: Чтобы установить другой релиз Oracle Java 8 JDK, посетите страницу загрузок Oracle Java 8 JDK, примите лицензию, скопируйте ссылку на пакет .rpm, а затем используйте эту ссылку в команде wget.
Перейдите в домашний каталог и загрузите Oracle Java 8 JDK RPM:
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.rpm"
Затем установите пакет при помощи следующей команды:
sudo yum localinstall jdk-8u60-linux-x64.rpm
Примечание: Измените имя файла, чтобы установить другую версию Java.
Теперь пакет Java установлен в каталог /usr/java/jdk1.8.0_60/jre/bin/java и связан с /usr/bin/java.
Теперь можно удалить архив.
rm ~/jdk-8u60-linux-x64.rpm
2 Создание пользователя для Apache Kafka
Apache Kafka может обрабатывать запросы по сети, потому необходимо создать для него специального пользователя. Это сводит к минимуму возможные повреждения машины CentOS, на которой будет установлен сервер Kafka.
Примечание: После установки Apache Kafka рекомендуется создать нового не-root пользователя для работы на сервере.
Как пользователь sudo запустите следующую команду, чтобы создать пользователя kafka:
useradd kafka -m
Флаг -m создаст домашний каталог пользователя. Этот каталог, /home/kafka, будет в дальнейшем использоваться в качестве рабочего пространства для запуска команд.
Установите пароль:
passwd kafka
Добавьте этого пользователя в группу wheel, чтобы иметь возможность установить все зависимости брокера сообщений.
usermod -aG wheel kafka
Пользователь kafka готов к работе. Перейдите в этот пользовательский аккаунт:
su -l kafka
3. Загрузка и извлечение Apache Kafka
Теперь, когда зависимости установлены, можно переходить к загрузке бинарных файлов Apache Kafka.
Создайте каталог Downloads для хранения загруженных пакетов.
mkdir ~/Downloads
Затем используйте curl, чтобы загрузить бинарные файлы Apache Kafka.
curl "http://www-eu.apache.org/dist/kafka/1.1.0/kafka_2.12-1.1.0.tgz" -o ~/Downloads/kafka.tgz
Создайте каталог по имени kafka и откройте его. Это базовый каталог сервера Kafka.
mkdir ~/kafka && cd ~/kafka
Извлеките загруженный архив в этот каталог:
tar -xvzf ~/Downloads/kafka.tgz --strip 1
Флаг —strip 1 извлекает содержимое архива в каталог ~/kafka/, а не в другой подкаталог (например, ~/kafka/kafka_2.12-1.1.0/).
Теперь можно перейти к настройке Kafka.
4.Настройка сервера Kafka
Kafka по умолчанию не позволяет удалять темы, категории и группы, в которых могут быть опубликованы сообщения. Чтобы изменить это, отредактируйте конфигурации. Откройте server.properties в текстовом редакторе.
vi ~/kafka/config/server.properties
Чтобы изменить стандартное поведение, добавьте в конец файла такую строку:
delete.topic.enable = true
Когда вы закончите, нажмите Esc, чтобы выйти из режима вставки, и :wq, чтобы записать изменения в файл и выйти. Теперь пора перейти к созданию юнит-файлов.
5.Создание юнит-файла для Kafka
Теперь нужно создать юнит-файлы systemd для сервиса Kafka. Это позволит управлять сервисом Kafka – запускать, останавливать и перезапускать его в соответствии с другими сервисами Linux.
Zookeeper – это сервис, который Kafka использует для управления состоянием и конфигурацией кластера. Он широко используется как неотъемлемый компонент во многих распределенных системах. Больше можно узнать в официальной документации Zookeeper.
Создайте файл:
vi /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
В разделе [Unit] указано, что Zookeeper нужна сеть и файловая система, прежде чем сервис сможет начать работу.
Раздел [Service] указывает, что systemd должен использовать файлы оболочки zookeeper-server-start.sh и zookeeper-server-stop.sh для запуска и остановки сервиса. Он также указывает, что Zookeeper следует перезапускать автоматически, если он выходит из строя.
Теперь создайте юнит-файл для kafka:
vi /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
Раздел [Unit] сообщает, что этот юнит-файл зависит от zookeeper.service. Благодаря этой зависимости zookeeper будет всегда автоматически запускаться раньше, чем kafka.
Раздел [Service] указывает, что systemd должна использовать файлы оболочки kafka-server-start.sh и kafka-server-stop.sh для запуска и остановки сервиса. Он также указывает, что Kafka следует перезапускать автоматически, если он выходит из строя.
Теперь юнит-файлы готовы. Можно запустить Kafka:
systemctl start kafka
Чтобы убедиться, что сервис запустился успешно, проверьте логи юнита:
journalctl -u kafka
Вы получите:
Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.
Теперь сервис Kafka запущен и прослушивает порт 9092.
Однако пока что этот сервис не будет запускаться автоматически вместе с сервером. Чтобы добавить kafka в автозагрузку, введите:
systemctl enable kafka
6.Тестирование установки
Чтобы убедиться, что сервер Kafka работает правильно, попробуйте опубликовать тестовое сообщение «Hello World».
Для публикации сообщений необходимы:
- Издатель (producer), который позволяет публиковать записи и данные по темам.
- Подписчик (consumer), который читает сообщения.
Создайте тему TutorialTopic:
~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
Чтобы создать издателя, используйте в командной строке скрипт kafka-console-producer.sh. Ему нужны аргументы – имя хоста Kafka, порт и тема.
Опубликуйте строку «Hello, World» в теме TutorialTopic:
echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
Теперь можно создать подписчика с помощью скрипта kafka-console-consumer.sh. Ему в качестве аргументов нужны имя хоста, порт ZooKeeper и тема.
Следующая команда подпишется на сообщения из TutorialTopic. Обратите внимание на флаг —from-begin, который позволяет читать сообщения, которые были опубликованы до того, как состоялась подписка:
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
Если в конфигурации нет ошибок, вы получите в терминале вывод:
Hello, World
Сценарий будет продолжать работать, ожидая публикации новых сообщений в этой теме. Вы можете открыть новый терминал и с помощью издателя опубликовать еще несколько сообщений. Вы должны видеть все новые сообщения в терминале подписчика.
Когда вы закончите тестирование, нажмите CTRL + C, чтобы остановить скрипт подписчика.
7.Установка KafkaT (опционально)
KafkaT – это очень полезный инструмент, разработанный Airbnb, который позволяет просматривать подробную информацию о кластере Kafka и выполнять некоторые задачи по управлению из командной строки. Сам инструмент является gem-ом Ruby, потому для его работы нужно установить Ruby. Также понадобится пакет build-essential, позволяющий собрать необходимые gem-ы. Установите всё это при помощи команды:
sudo yum install ruby ruby-devel make gcc patch
Теперь установите KafkaT при помощи команды gem.
sudo gem install kafkat
Конфигурационный файл .kafkatcfg используется KafkaT для определения каталога установки и логов сервера Kafka. Также он настроит взаимодействие KafkaT и ZooKeeper. Создайте файл:
vi ~/.kafkatcfg
Добавьте в файл следующие строки:
{
"kafka_path": "~/kafka",
"log_path": "/tmp/kafka-logs",
"zk_path": "localhost:2181"
}
Теперь инструмент KafkaT готов к работе. Чтобы просмотреть информацию обо всех разделах сервера Kafka, введите команду:
kafkat partitions
Вывод выглядит так:
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
__consumer_offsets 0 0 [0] [0]
...
...
Вы увидите TutorialTopic, а также __consumer_offsets, внутреннюю тему, используемую Kafka для хранения информации, связанной с клиентом. Вы можете смело игнорировать строки, начинающиеся с __consumer_offsets.
Примечание: Чтобы узнать больше о KafkaT, посетите GitHub-репозиторий проекта.
8.Настройка многоузлового кластера (опционально)
Чтобы создать многоузловой кластер Kafka, состоящий из нескольких машин CentOS 7, повторите инструкции разделов 1-5 на каждой машине. Кроме того, на каждой машине нужно внести в server.properties такие изменения:
- Значение broker.id должно быть уникальным на каждом компоненте кластера (например, «server1», «server2» и так далее).
- Значение параметра zookeeper.connect на каждой ноде должно указывать на один и тот же экземпляр ZooKeeper. Это свойство следует формату <HOSTNAME/IP_ADDRESS>:<PORT> (например, «203.0.113.0:2181», «203.0.113.1:2181»).
Чтобы установить несколько экземпляров ZooKeeper для одного кластера, значение zookeeper.connect на каждой ноде должно содержать IP-адреса и номера портов всех экземпляров ZooKeeper через запятую.
9. Ограничение прав пользователя Kafka
Теперь, когда установка завершена, можно отнять права администратора у пользователя kafka. Но прежде чем сделать это, нужно выйти из системы и снова войти как любой другой не-root пользователь с правами sudo.
Чтобы отнять root-права у пользователя kafka, удалите его из группы wheel:
gpasswd -d kafka wheel
Чтобы повысить безопасность сервера Kafka, заблокируйте пароль пользователя kafka, чтобы никто не мог открыть этот аккаунт.
passwd kafka -l
Теперь только пользователь с правами root или sudo может открыть аккаунт kafka при помощи команды:
sudo su - kafka
Чтобы разблокировать пароль, используйте команду:
passwd kafka -u
==================================================
Резервное копирование
Резервное копирование данных Apache Kafka является важной частью работы с данными. Регулярный бэкап поможет восстановиться после случайной потери данных или устранить неправильные данные, добавленные в кластер по ошибке пользователя. Эффективным способом резервного копирования и восстановления являются дампы данных кластера и разделов.
Импорт и миграция резервных копий данных на отдельный сервер полезны в ситуациях, когда экземпляр Kafka становится непригодным для работы из-за аппаратного или сетевого сбоя, и вам необходимо создать новый экземпляр со старыми данными. Также эти процедуры полезны при перемещении экземпляра Kafka на другой сервер из-за изменения в использовании ресурсов.
1: Создание тестовой темы и добавление сообщений
Сообщение в Kafka – основная единица хранения данных, это объект, который можно опубликовать и на который можно подписаться. Тема Kafka – это что-то типа контейнера для группы связанных сообщений. Когда вы подписываетесь на определенную тему, вы будете получать только сообщения, которые были опубликованы в этой конкретной теме. Сейчас войдите на сервер, данные которого вы хотите скопировать (исходный сервер), и добавите тему Kafka и сообщение, чтобы у вас были какие-то тестовые данные.
В этом мануале предполагается, что вы установили Kafka в домашний каталог пользователя kafka (/home/kafka/kafka). Если ваша установка находится в другом каталоге, измените часть ~/kafka в командах, в которых указан путь к установке.
Подключитесь по SSH:
ssh centos7@source_server_ip
Запустите эту команду, чтобы войти как пользователь kafka:
sudo -iu kafka
Создайте тему BackupTopic, используя служебный файл оболочки kafka-topics.sh в каталоге bin вашей установки Kafka:
~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic BackupTopic
Опубликуйте строку «Test Message 1» в теме BackupTopic с помощью служебного сценария оболочки ~/kafka/bin/kafka-console-producer.sh.
Если вы хотите добавить дополнительные сообщения, вы можете сделать это сейчас.
echo "Test Message 1" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic BackupTopic > /dev/null
Файл ~/kafka/bin/kafka-console-producer.sh позволяет публиковать сообщения непосредственно из командной строки. Обычно сообщения публикуются через клиентскую библиотеку Kafka, внутри вашей программы, но поскольку для этого требуются разные настройки для разных языков программирования, вы можете использовать сценарий оболочки как независимый от языка способ публикации сообщений во время тестирования или выполнения административных задач. Флаг —topic указывает тему, в которой будет опубликовано сообщение.
Затем убедитесь, что сценарий kafka-console-producer.sh опубликовал сообщение(я), выполнив следующую команду:
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic BackupTopic --from-beginning
Сценарий оболочки ~/kafka/bin/kafka-console-consumer.sh запускает потребителя. После запуска он будет подписываться на сообщения из темы, опубликованной вами в сообщении «Test Message 1» в предыдущей команде. Флаг —from-begin в команде позволяет получить доступ к сообщениям, опубликованным до запуска потребителя. Если этот флажок не установлен, будут отображаться только сообщения, опубликованные после запуска потребителя. Запустив команду, вы увидите следующий вывод в терминале:
Test Message 1
Нажмите CTRL+C, чтобы остановить потребителя.
Теперь у вас есть тестовые данные, и вы можете получить к ним доступ.
2: Резервное копирование данных ZooKeeper
Прежде чем приступить к бэкапу данных Kafka, нужно скопировать состояние кластера, которое хранит ZooKeeper.
ZooKeeper хранит свои данные в каталоге, указанном в поле dataDir в файле конфигурации ~/kafka/config/zookeeper.properties. Вам необходимо прочитать значение этого поля, чтобы определить каталог для резервного копирования. По умолчанию dataDir указывает на каталог /tmp/zookeeper . Если в вашей установке значение отличается, замените /tmp/zookeeper этим значением в следующих командах.
Вот примерный вывод ~/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
...
...
...
Теперь, когда у вас есть путь к каталогу, вы можете создать сжатый файл его содержимого. Сжатые архивные файлы лучше простых файлов, они экономят место на диске. Запустите следующую команду:
tar -czf /home/kafka/zookeeper-backup.tar.gz /tmp/zookeeper/*
Вывод команды можно смело игнорировать:
tar: Removing leading / from member names
Флаги -c и -z создают архив и применяют к нему сжатие gzip. Флаг -f указывает имя выходного сжатого архивного файла, в данном случае это zookeeper-backup.tar.gz.
Запустите ls в текущем каталоге и убедитесь, что в нем есть zookeeper-backup.tar.gz.
Если файл есть – значит, бэкап прошел успешно.
3: Резервное копирование тем и сообщений Kafka
В этом разделе вы создадите резервную копию каталога данных Kafka в сжатый tar-файл, как вы делали это для ZooKeeper на предыдущем шаге.
Kafka хранит темы, сообщения и внутренние файлы в каталоге, указанном в поле log.dirs в файле конфигурации ~/kafka/config/server.properties. Вам необходимо прочитать значение этого поля, чтобы определить каталог для резервного копирования. По умолчанию в вашей текущей установке log.dirs указывает на каталог /tmp/kafka-logs. Если в вашей установке это не так, укажите в следующих командах правильное значение.
Вот так примерно выглядит вывод файла ~/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
...
...
...
Сначала остановите сервис Kafka, чтобы данные в каталоге log.dirs находились в согласованном состоянии при создании архива tar. Чтобы сделать это, вернитесь в сессию пользователя без прав root на сервере, введя команду exit, а затем выполните следующую команду:
sudo systemctl stop kafka
После остановки Kafka войдите в систему как пользователь kafka:
sudo -iu kafka
Останавливать и запускать сервисы Kafka и ZooKeeper нужно от имени пользователя sudo (не root), поскольку (согласно мануалу по установке Apache Kafka) вы ограничили пользователя kafka в качестве меры безопасности. Это отключает доступ sudo для пользователя kafka, что приводит к невозможности выполнения команд.
Теперь создайте сжатый файл содержимого каталога, выполнив следующую команду:
tar -czf /home/kafka/kafka-backup.tar.gz /tmp/kafka-logs/*
Снова можете спокойно игнорировать вывод команды:
tar: Removing leading / from member names
Вы можете запустить ls в текущем каталоге, чтобы увидеть в нем файл kafka-backup.tar.gz.
Затем можно снова запустить Kafka – если вы не хотите сразу восстанавливать данные. Введите команду exit, чтобы переключиться на пользователя без полномочий root, и затем запустите:
sudo systemctl start kafka
Войдите как пользователь kafka:
sudo -iu kafka
Вы успешно создали резервную копию данных Kafka. Теперь вы можете попробовать восстановить данные о состоянии кластера, хранящиеся в ZooKeeper.
4: Восстановление данных ZooKeeper
В этом разделе мы восстановим данные о состоянии кластера, которые Kafka создает, когда пользователь выполняет такие операции, как создание раздела, добавление/удаление дополнительных нод, добавление и потребление сообщений и так далее. Вы узнаете, как восстановить данные в существующей исходной установке, удалив каталог данных ZooKeeper и восстановив содержимое файла zookeeper-backup.tar.gz. Если вы хотите восстановить данные на другом сервере, см. раздел 7.
Сейчас нужно остановить Kafka и ZooKeeper, чтобы сохранить целостность данных.
Остановите Kafka. Введите exit, чтобы переключиться на пользователя sudo, а затем запустите:
sudo systemctl stop kafka
Затем остановите сервис ZooKeeper:
sudo systemctl stop zookeeper
Переключитесь на пользователя kafka:
sudo -iu kafka
Затем вы можете безопасно удалить существующий каталог данных кластера с помощью следующей команды:
rm -r /tmp/zookeeper/*
Теперь восстановите данные, резервные копии которых вы создали в разделе 2:
tar -C /tmp/zookeeper -xzf /home/kafka/zookeeper-backup.tar.gz --strip-components 2
Флаг -C переходит в каталог /tmp/zookeeper перед извлечением данных. Флаг —strip 2 извлечет содержимое архива в /tmp/zookeeper, а не в другой каталог (например, /tmp/zookeeper/tmp/zookeeper/) внутри него.
Теперь попробуем восстановить данные Kafka.
5: Восстановление данных Kafka
Теперь попробуйте восстановить резервную копию данных Kafka на исходном сервере (восстановление на другом сервере описано в разделе 7). Для этого нужно удалить каталог данных Kafka и восстановить сжатый архив.
Удалите каталог данных Kafka:
rm -r /tmp/kafka-logs/*
Теперь, когда вы удалили данные, ваша установка Kafka напоминает свежую установку, в которой нет тем и сообщений. Чтобы восстановить резервные копии данных, распакуйте файлы:
tar -C /tmp/kafka-logs -xzf /home/kafka/kafka-backup.tar.gz --strip-components 2
Флаг -C переходит в каталог /tmp/kafka-logs перед извлечением данных. Флаг —strip 2 извлечет содержимое архива в /tmp/kafka-logs, а не в другой каталог (например, /tmp/kafka-logs/kafka-logs/) внутри него.
Теперь, когда вы успешно извлекли данные, вы можете снова запустить сервисы Kafka и ZooKeeper. Введите команду exit, чтобы переключиться на пользователя sudo, а затем запустите:
sudo systemctl start kafka
Чтобы запустить ZooKeeper, введите:
sudo systemctl start zookeeper
Вернитесь к пользователю kafka:
sudo -iu kafka
Вы восстановили данные kafka, а теперь нужно проверить, насколько это было успешно.
6: Проверка восстановления
Чтобы проверить восстановленные данные Kafka, нужно использовать сообщения из темы, созданной в разделе 1.
Подождите несколько минут, пока Kafka запустится, а затем выполните следующую команду, чтобы прочитать сообщения из BackupTopic:
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic BackupTopic --from-beginning
Если вы получили такое предупреждение, вам нужно подождать, пока Kafka полностью запустится.
[2019-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)
Повторите предыдущую команду через несколько минут или запустите:
sudo systemctl restart kafka
от имени пользователя sudo. Если данные восстановились без проблем, вы увидите следующий вывод:
Test Message 1
Если вы не получили это сообщение, убедитесь, что вы выполнили все команды в предыдущем разделе правильно.
Проверив данные Kafka, вы знаете, что успешно создали резервную копию и можете восстановить свои данные в рамках одного сервера Kafka.
7: Перемещение и восстановление резервной копии Kafka между серверами (опционально)
В этом разделе вы узнаете, как перенести данные Kafka с исходного сервера на целевой. Для этого нужна команда scp – она позволяет загрузить сжатый файл tar.gz в локальную систему. После этого с помощью этой же команды scp вы можете загрузить файлы на целевой сервер. После того как файлы появятся на конечном сервере, вы сможете восстановить резервную копию и убедиться, что миграция прошла успешно.
Файлы резервных копий нужно сначала загрузить локально, а затем – на целевой сервер. Скопировать их непосредственно с исходного на целевой сервер не получится, поскольку у последнего нет SSH-ключа вашего исходного сервера в файле /home/user1/.ssh/authorized_keys и он не может подключиться к нему. Однако локальный компьютер может подключаться к обоим серверам, что избавляет вас от дополнительных настроек SSH-доступа между серверами.
Загрузите файл zookeeper-backup.tar.gz на локальную машину.
scp centos7@source_server_ip:/home/kafka/zookeeper-backup.tar.gz .
Вы получите:
zookeeper-backup.tar.gz 100% 68KB 128.0KB/s 00:00
Затем запустите следующую команду, чтобы загрузить kafka-backup.tar.gz на локальную машину:
scp centos7@source_server_ip:/home/kafka/kafka-backup.tar.gz .
Команда вернет:
kafka-backup.tar.gz 100% 1031KB 488.3KB/s 00:02
В текущем каталоге на локальной машине запустите ls, чтобы проверить наличие этих файлов.
kafka-backup.tar.gz zookeeper.tar.gz
Выполните следующую команду, чтобы передать файл zookeeper-backup.tar.gz в /home/kafka/ на целевом сервере:
scp zookeeper-backup.tar.gz centos7@destination_server_ip:/home/user1/zookeeper-backup.tar.gz
Теперь выполните следующую команду, чтобы передать файл kafka-backup.tar.gz /home/kafka/ на целевом сервере:
scp kafka-backup.tar.gz centos7@destination_server_ip:/home/user1/kafka-backup.tar.gz
Вы успешно загрузили файлы резервных копий на целевой сервер. Поскольку файлы находятся в каталоге /home/user1/, а к нему у пользователя kafka нет доступа, вы можете переместить файлы в каталог /home/kafka/ и изменить права на них.
Подключитесь к целевому серверу по SSH:
ssh centos7@destination_server_ip
Переместите zookeeper-backup.tar.gz в /home/kafka/:
sudo mv zookeeper-backup.tar.gz /home/user1/zookeeper-backup.tar.gz
Затем переместите файл kafka-backup.tar.gz в /home/kafka/:
sudo mv kafka-backup.tar.gz /home/kafka/kafka-backup.tar.gz
Передайте права на резервные копии пользователю kafka:
sudo chown kafka /home/kafka/zookeeper-backup.tar.gz /home/kafka/kafka-backup.tar.gz
Предыдущие команды mv и chown не будут отображать никаких выходных данных.
Теперь, когда файлы резервных копий находятся на целевом сервере и в правильном каталоге, следуйте командам, перечисленным в разделах 4–6 этого мануала, чтобы восстановить и проверить данные на целевом сервере.