Как установить Apache Kafka на Ubuntu 14.04
Введение
Apache Kafka — популярный распределенный брокер сообщений, предназначенный для эффективной обработки больших объемов данных в режиме реального времени. Кластер Kafka не только обладает высокой масштабируемостью и отказоустойчивостью, но также имеет гораздо более высокую пропускную способность по сравнению с другими брокерами сообщений, такими как ActiveMQ и RabbitMQ. Хотя он обычно используется в качестве системы обмена сообщениями pub/sub, многие организации также используют его для агрегирования журналов, поскольку он предлагает постоянное хранилище для опубликованных сообщений.
В этом руководстве вы узнаете, как установить и использовать Apache Kafka 0.8.2.1 в Ubuntu 14.04.
Предпосылки
Чтобы следовать дальше, вам понадобятся:
- Дроплет Ubuntu 14.04
- Не менее 4 ГБ подкачки.
Шаг 1 — Создайте пользователя для Kafka
Поскольку Kafka может обрабатывать запросы по сети, вам следует создать для нее выделенного пользователя. Это сводит к минимуму ущерб вашей машине с Ubuntu, если сервер Kafka будет состоять из нее.
Примечание. После настройки Apache Kafka рекомендуется создать другого пользователя без полномочий root для выполнения других задач на этом сервере.
Как root, создайте пользователя с именем kafka с помощью команды useradd
:
- useradd kafka -m
Установите его пароль с помощью passwd
:
- passwd kafka
Добавьте его в группу sudo
, чтобы у него были права, необходимые для установки зависимостей Kafka. Это можно сделать с помощью команды adduser
:
- adduser kafka sudo
Теперь ваш пользователь Kafka готов. Войдите в него с помощью su
:
- su - kafka
Шаг 2 — Установите Java
Перед установкой дополнительных пакетов обновите список доступных пакетов, чтобы установить последние версии, доступные в репозитории:
- sudo apt-get update
Поскольку Apache Kafka нуждается в среде выполнения Java, используйте apt-get
для установки пакета default-jre
:
- sudo apt-get install default-jre
Шаг 3 — Установите ZooKeeper
Apache ZooKeeper — это служба с открытым исходным кодом, созданная для координации и синхронизации информации о конфигурации узлов, принадлежащих распределенной системе. Кластер Kafka зависит от ZooKeeper для выполнения, среди прочего, таких операций, как обнаружение отказавших узлов и выбор лидеров.
Поскольку пакет ZooKeeper доступен в стандартных репозиториях Ubuntu, установите его с помощью apt-get
.
- sudo apt-get install zookeeperd
После завершения установки ZooKeeper автоматически запустится как демон. По умолчанию он будет прослушивать порт 2181.
Чтобы убедиться, что он работает, подключитесь к нему через Telnet:
- telnet localhost 2181
В командной строке Telnet введите ruok
и нажмите ENTER
.
Если все в порядке, ZooKeeper скажет imok
и завершит сеанс Telnet.
Шаг 4 — Загрузите и распакуйте двоичные файлы Kafka
Теперь, когда Java и ZooKeeper установлены, пришло время скачать и распаковать Kafka.
Для начала создайте каталог с именем Загрузки
для хранения всех ваших загрузок.
- mkdir -p ~/Downloads
Используйте wget
для загрузки двоичных файлов 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
.
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
Шаг 5 — Настройте сервер Kafka
Следующим шагом будет настройка сервера Kakfa.
Откройте server.properties
с помощью vi
:
- vi ~/kafka/config/server.properties
По умолчанию Kafka не позволяет удалять темы. Чтобы иметь возможность удалять темы, добавьте в конец файла следующую строку:
delete.topic.enable = true
Сохраните файл и выйдите из vi
.
Шаг 6 — Запустите сервер Kafka
Запустите сценарий kafka-server-start.sh
с помощью nohup
, чтобы запустить сервер Kafka (также называемый брокером 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 — Проверьте установку
Давайте теперь опубликуем и воспользуемся сообщением «Hello World», чтобы убедиться, что сервер Kafka работает правильно.
Чтобы публиковать сообщения, вы должны создать производителя 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, а также выполняет несколько административных задач из командной строки. Поскольку это драгоценный камень Ruby, вам понадобится Ruby для его использования. Вам также понадобится пакет build-essential
, чтобы иметь возможность собирать другие гемы, от которых он зависит. Установите их с помощью apt-get
:
- 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 — Настройте многоузловой кластер (необязательно)
Если вы хотите создать кластер с несколькими брокерами, используя больше машин Ubuntu 14.04, вам следует повторить Шаг 1, Шаг 3, Шаг 4 и Шаг 5 на каждой из новых машин. Кроме того, вы должны внести следующие изменения в файл server.properties
в каждом из них:
- значение свойства
broker.id
должно быть изменено таким образом, чтобы оно было уникальным во всем кластере - значение свойства
zookeeper.connect
должно быть изменено таким образом, чтобы все узлы указывали на один и тот же экземпляр ZooKeeper
Если вы хотите иметь несколько экземпляров ZooKeeper для своего кластера, значение свойства zookeeper.connect
на каждом узле должно быть идентичной строкой, разделенной запятыми, в которой перечислены IP-адреса и номера портов всех ZooKeeper. экземпляры.
Шаг 10 — Ограничьте пользователя Kafka
Теперь, когда все установки завершены, вы можете удалить права администратора пользователя kafka
. Прежде чем сделать это, выйдите из системы и снова войдите в систему как любой другой пользователь sudo без полномочий root. Если вы все еще используете тот же сеанс оболочки, с которого начали это руководство, просто введите exit
.
Чтобы лишить пользователя kafka
прав администратора, удалите его из группы sudo
.
- sudo deluser kafka sudo
Чтобы еще больше повысить безопасность вашего сервера Kafka, заблокируйте пароль пользователя kafka
с помощью команды passwd
. Это гарантирует, что никто не сможет войти в него напрямую.
- sudo passwd kafka -l
На данный момент только пользователь root или sudo может войти в систему как kafka
, введя следующую команду:
- sudo su - kafka
В будущем, если вы захотите его разблокировать, используйте passwd
с опцией -u
:
- sudo passwd kafka -u
Заключение
Теперь у вас есть безопасный Apache Kafka, работающий на вашем сервере Ubuntu. Вы можете легко использовать его в своих проектах, создавая производителей и потребителей Kafka с помощью документации.