Установка Apache Kafka на Ubuntu 14.04
Apache Kafka – это популярный распределённый брокер сообщений, предназначенный для обработки больших объемов данных в режиме реального времени. Кластер Kafka обладает не только высокой масштабируемостью и отказоустойчивостью, но также имеет гораздо более высокую пропускную способность по сравнению с другими брокерами сообщений (как ActiveMQ и RabbitMQ). Как правило, Apache Kafka используется в качестве системы обмена сообщениями pub/sub, однако многие организации используют его для журналирования, потому что он обеспечивает постоянное хранение опубликованных сообщений.
В данном руководстве показано, как установить и использовать Apache Kafka 0.8.2.1 на Ubuntu 14.04.
Требования
Для выполнения руководства понадобится:
- Сервер Ubuntu 14.04
- 4GB своп-пространства как минимум.
1: Создание пользователя для Apache Kafka
Apache Kafka может обрабатывать запросы по сети, потому необходимо создать для него специального пользователя. Это сводит к минимуму возможные повреждения машины Ubuntu, на которой будет установлен сервер Kafka.
Примечание: После установки Apache Kafka рекомендуется создать нового не-root пользователя для работы на сервере.
Как пользователь root запустите следующую команду, чтобы создать пользователя kafka:
useradd kafka -m
Установите пароль:
passwd kafka
Добавьте этого пользователя в группу sudo, чтобы иметь возможность установить все зависимости брокера сообщений.
adduser kafka sudo
Пользователь kafka полностью готов к работе. Переключитесь в этот пользовательский аккаунт:
su - kafka
2: Установка Java
Перед установкой дополнительных пакетов нужно обновить список пакетов системы:
sudo apt-get update
Для работы Apache Kafka необходимо окружение Java. Установите пакет default-jre:
sudo apt-get install default-jre
3: Установка ZooKeeper
Apache ZooKeeper – это открытый сервис для координации и синхронизации настроек нод распределенной системы. Этот сервис необходим кластеру Kafka, помимо прочего, для выполнения таких операций, как выявление неисправных нод и выбор ведущей ноды.
Пакет ZooKeeper доступен в стандартном репозитории Ubuntu, потому его очень просто установить:
sudo apt-get install zookeeperd
После завершения установки ZooKeeper будет автоматически запущен как демон, по умолчанию он слушает порт 2181.
Чтобы убедиться, что ZooKeeper работает, попробуйте подключиться к нему через Telnet:
telnet localhost 2181
В командной строке Telnet введите:
ruok
и нажмите Enter. Если все работает должным образом, ZooKeeper ответит imok и закроет сессию Telnet.
4: Загрузка и извлечение Apache Kafka
Теперь, когда зависимости установлены, можно переходить к загрузке бинарных пакетов Apache Kafka.
Создайте каталог Downloads для хранения загруженных пакетов.
mkdir -p ~/Downloads
Затем используйте wget, чтобы загрузить двоичные файлы Apache Kafka.
wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz
Создайте каталог по имени kafka и откройте его. Это базовый каталог сервера Kafka.
mkdir -p ~/kafka && cd ~/kafka
Извлеките загруженный архив в этот каталог:
tar -xvzf ~/Downloads/kafka.tgz --strip 1
5: Настройка сервера Kafka
Теперь нужно настроить сервер Kafka. Откройте server.properties в текстовом редакторе vi.
vi ~/kafka/config/server.properties
По умолчанию Kafka не разрешает удалять темы сообщений. Чтобы изменить это, добавьте в конец файла такую строку:
delete.topic.enable = true
Сохраните и закройте файл.
6: Запуск сервера Kafka
Запустите скрипт kafka-server-start.sh при помощи команды nohup; это запустит сервер Kafka как фоновый процесс, который зависит от сессии оболочки.
nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
Запуск займёт несколько секунд. В случае успешного запуска сервера в логе ~/kafka/kafka.log появятся следующие сообщения:
...
[2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)
[2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
Теперь брокер Kafka запущен и слушает порт 9092.
7: Тестирование установки
Чтобы убедиться, что сервер Kafka работает правильно, попробуйте опубликовать тестовое сообщение «Hello World».
Для публикации сообщений необходимо создать генератор Kafka. Это очень просто выполнить с помощью скрипта 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 создаст её автоматически.
Чтобы получать сообщения, можно создать клиент Kafka при помощи скрипта kafka-console-consumer.sh, который запрашивает имя хоста и порт сервера ZooKeeper, а также тему как аргументы.
Следующая команда получит опубликованные ранее сообщения. обратите внимание: флаг –from-beginning позволяет получить сообщения, опубликованные до того, как был запущен клиент.
~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning
Если в настройке не было допущено ошибок, на экране появится вывод:
Hello, World
Скрипт будет продолжать работу и ждать новых сообщений. Попробуйте открыть новый терминал и запустить генератор, чтобы опубликовать ещё несколько сообщений. Все они должны сразу появиться на клиенте.
Завершив тестирование, нажмите CTRL+C, чтобы остановить работу клиента.
8: Установка KafkaT (опционально)
KafkaT – это очень полезный инструмент, разработанный Airbnb, который позволяет просматривать подробную информацию о кластере Kafka и выполнять некоторые задачи по управлению из командной строки. Сам инструмент является gem-ом Ruby, потому для его работы нужно установить Ruby. Также понадобится пакет build-essential, позволяющий собрать необходимые gem-ы. Установите всё это при помощи команды:
sudo apt-get install ruby ruby-dev build-essential
Теперь установите KafkaT при помощи команды gem.
sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc
Используйте vi, чтобы создать файл .kafkatcfg:
vi ~/.kafkatcfg
Этот конфигурационный файл используется KafkaT для папки установки и логов сервера Kafka. Также он настроит взаимодействие KafkaT и ZooKeeper. Добавьте в файл следующие строки:
{
"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]
Примечание: Чтобы узнать больше о KafkaT, посетите GitHub-репозиторий проекта.
9: Настройка многоузлового кластера (опционально)
Чтобы создать многоузловой кластер Kafka, состоящий из нескольких машин Ubuntu 14.04, повторите инструкции разделов 1-5 на каждой машине. Кроме того, на каждой машине нужно внести в server.properties такие изменения:
- Значение broker.id должно быть уникальным на каждом компоненте кластера.
- Значение параметра zookeeper.connect на каждой ноде должно указывать на один и тот же экземпляр ZooKeeper.
Чтобы установить несколько экземпляров ZooKeeper для одного кластера, значение zookeeper.connect на каждой ноде должно содержать IP-адреса и номера портов всех экземпляров ZooKeeper, перечисленные через запятую.
10: Права пользователя Kafka
Теперь, когда установка завершена, можно отнять права администратора у пользователя kafka. Но прежде чем сделать это, нужно выйти из системы и снова войти как любой другой не-root пользователь с правами sudo.
Чтобы отнять root-права у пользователя kafka, удалите его из группы sudo:
sudo deluser kafka sudo
Чтобы повысить безопасность сервера Kafka, заблокируйте пароль пользователя kafka, чтобы никто не мог открыть этот аккаунт.
sudo passwd kafka -l
Теперь только пользователь с правами root или sudo может открыть аккаунт kafka при помощи команды:
sudo su - kafka
Чтобы разблокировать пароль, используйте команду:
sudo passwd kafka -u
Заключение
Теперь сервер Apache Kafka запущен на сервере Ubuntu и защищён. Его можно использовать его в различных проектах; клиенты Kafka совместимы с большинством языков программирования. Чтобы узнать больше о Apache Kafka, обратитесь к документации программы.
Tags: Apache Kafka, Apache ZooKeeper, Java, KafkaT, Ubuntu 14.04
1 комментарий
Если сетапите кластер из 3х машин:
В пункте 5: Настройка сервера Kafka нужно указать advertised.host.name=ВАШ IP адрес на каждой ноде.
Без этой опции будет пытаться идти по hostname, а если он не резолвится, будет сыпать в лог ошибки вида “Нет лидера” .. etc.