Установка 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: , , , ,

1 комментарий

  • Антон Кириленко says:

    Если сетапите кластер из 3х машин:
    В пункте 5: Настройка сервера Kafka нужно указать advertised.host.name=ВАШ IP адрес на каждой ноде.
    Без этой опции будет пытаться идти по hostname, а если он не резолвится, будет сыпать в лог ошибки вида “Нет лидера” .. etc.

Добавить комментарий для Антон Кириленко Отменить ответ