Установка Kafka в Unix/Linux

Установка Kafka в Unix/Linux

Kafka (Apache Kafka) — Является популярным распределенным брокером сообщений, разработанным для эффективного управления большими объемами данных в режиме реального времени. Кластер Kafka не только хорошо масштабируется (настраивается отказоустойчивость), но также имеет гораздо более высокую пропускную способность по сравнению с другими подобными технологиями, — такими как ActiveMQ и RabbitMQ. Хотя он обычно используется в качестве системы обмена сообщениями pub/sub, многие организации также используют его для агрегирования логов, поскольку он обеспечивает постоянное хранение опубликованных сообщений.

Установка Kafka в Unix/Linux

В данной статье, я расскажу как можно установить kafka на различные Unix/Linux ОС.

Установка Kafka на Debian/Ubuntu

Создаем kafka пользователя 

Поскольку Kafka может обрабатывать запросы через сеть, вам следует создать для нее выделенного пользователя.

Примечание. После настройки Apache Kafka рекомендуется создать другого пользователя без полномочий root для выполнения других задач на этом сервере.

В качестве пользователя root создайте пользователя с именем kafka с помощью команды:

# useradd kafka -m

Назначим пароль для созданного пользователя:

# passwd kafka

После этого, созданного юзера вносим в группу sudo( чтобы иметь привилегии, необходимые для установки зависимостей Кафки). Это можно сделать с помощью команды:

# adduser kafka sudo

Теперь ваш пользователь готов. Залогинимся в него:

# su - kafka

Устанавка Java

Если не знаете как выполнить установку Java, JRE — вот мануалы:

Установка JAVA 9 (JDK9) на Debian/Ubuntu/LinuxMint

Установка Java на Debian/Ubuntu/Mint

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

Устанавка ZooKeeper

Если не знаете как выполнить установку ZooKeeper — вот мануал:

Установка ZooKeeper в Unix/Linux

По умолчанию он будет прослушивать 2181 порт. Чтобы убедиться, что он работает, подключитесь к нему через Telnet:

# telnet localhost 2181

Вводим слово и нажимаем «enter»:

ruok

Если все работает, то должны получить:

imok

После чего, сеанс сам завершиться.

Устанавка Kafka

Теперь, когда установлены Java и ZooKeeper, настало время загрузить и распаковать Kafka.

$ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz"

PS: Вышла новая версия ПО и ее можно скачать (на момент обновления статьи):

$ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/1.0.0/kafka-1.0.0-src.tgz"

Выполняем распаковку:

#  tar xfvz kafka_*tgz -C /usr/local/

PS: Опция «—strip 1» дает возможность не создавать папку, а распаковать все содержимое в текущее место.

Переименуем папку для удобства использования:

# mv /usr/local/kafka_* /usr/local/kafka

Переходим к настройке.

Настройка Kafka

Открываем:

# vim /usr/local/kafka/config/server.properties

По умолчанию, Kafka не позволяет удалять темы. Чтобы иметь возможность удалять темы, добавьте следующую строку в конец файла или, найдите и расскоментируйте данную строку (у меня это 24-я строка):

delete.topic.enable = true

Сохраняем и закрываем файл.

Запускаем скрипт kafka-server-start.sh, используя nohup, чтобы запустить сервер Kafka (также называемый брокер Kafka) в качестве фонового процесса, который не зависит от сеанса оболочки:

# nohup /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /var/log/kafka.log 2>&1 &

Подождите несколько секунд и сервер запустится. Чтобы быть уверенным что сервер успешно запущен, проверим kafka.log лог-файл:

...
[2017-04-09 01:35:37,019] INFO starting (kafka.server.KafkaServer)
[2017-04-09 01:35:37,024] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
[2017-04-09 01:35:37,048] INFO Starting ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
[2017-04-09 01:35:37,076] INFO Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:host.name=localhost.localdomain (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.version=1.8.0_121 (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.vendor=Oracle Corporation (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.home=/usr/java/jdk1.8.0_121/jre (org.apache.zookeeper.ZooKeeper)
.....
[2017-04-09 01:35:37,943] INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)
[2017-04-09 01:35:38,376] INFO Registered broker 0 at path /brokers/ids/0 with addresses: EndPoint(localhost.localdomain,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
....

Теперь у вас есть сервер Kafka, который прослушивает 9092 порт.

Тестирование Kafka

Давайте теперь опубликуем и используем сообщение «Hello, man», чтобы убедиться, что сервер Kafka работает правильно.

Для публикации сообщений вы должны создать «продюсера» для Kafka. Вы можете легко создать это прямо из командной строки, используя скрипт kafka-console-producer.sh:

$ echo "Hello, man" | /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Поскольку темы не существует, Кафка создаст ее автоматически.

Чтобы потреблять сообщения, вы можете создать потребителя Kafka, используя kafka-console-consumer.sh скрипт.

Следующая команда использует сообщения из опубликованной темы. Обратите внимание на использование флага -from-beginning, который присутствует.  Данный параметр покажет сообщение до запуска самого потребителя:

$ /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

Т.к я запускал несколько раз kafka-console-producer.sh, то получил следующее:

Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
Hello, World
Hello, World
Hello, man

Как видим, что все работает отлично!

Установка KafkaT

KafkaT — это небольшой инструмент от Airbnb, который упрощает просмотр информации о вашем кластере Kafka, а также выполняет несколько административных задач из командной строки. Поскольку он написанный на Ruby, то для его использования вам понадобится Ruby. Вам также понадобится пакет build-essential. Установите все необходимое с помощью следующей команды:

# apt-get install ruby ruby-dev build-essential -y

И сейчас, выполняем установку KafkaT:

# gem install kafkat --source https://rubygems.org --no-ri --no-rdoc

Получил ошибку:

ERROR:  Error installing kafkat:
	highline requires Ruby version >= 1.9.3.

Исправляем:

Установка Ruby (несколько версий Ruby) в Unix/Linux

Используйте текстовый редактор для создания нового файла:

# vim ~/.kafkatcfg

Это файл конфигурации, который KafkaT использует для определения каталогов установки и папки, где находятся логи от Kafka. Соответственно, добавьте следующие строки:

{
"kafka_path": "/usr/local/kafka",
"log_path": "/tmp/kafka-logs",
"zk_path": "localhost:2181"
}

Теперь вы готовы использовать KafkaT. Для начала рассмотрим, как вы будете использовать его для просмотра деталей всех разделов Kafka:

$ kafkat partitions

Вы должны увидеть следующий результат:

Topic		Partition	Leader		Replicas						ISRs						
TutorialTopic	0		0		[0]							[0]

PS: Можно построить multi-broker кластер.  Кроме того, вы должны внести следующие изменения в файл server.properties в каждом из них:

  • Значение свойства broker.id должно быть изменено таким образом, чтобы оно было уникальным во всем кластерах
  • Значение свойства zookeeper.connect должно быть изменено таким образом, чтобы все узлы указывали на тот же экземпляр ZooKeeper
  • Если вы хотите иметь несколько экземпляров ZooKeeper для вашего кластера, значение свойства zookeeper.connect на каждом узле должно быть идентичным, разделенным запятыми строкой, в которой перечислены IP-адреса и номера портов для всех экземпляров ZooKeeper.

Теперь, когда все установки сделаны, вы можете снять права администратора (суперпользователя) kafka. Для начала выйдите с оболочки или используйте другого пользователя чтобы сделать следующее действия. Удаляем пользователя kafka из группы sudo:

# deluser kafka sudo

Чтобы еще больше повысить безопасность вашего сервера Kafka, заблокируйте пароль пользователя kafka с помощью команды passwd. Это гарантирует, что никто не сможет напрямую войти через данного пользователя:

# passwd kafka -l

На данный момент только root или пользователь sudo могут войти в систему под именем kafka, введя следующую команду:

# su - kafka

В будущем, если вы хотите разблокировать его, используйте passwd с ключом «-u»:

# passwd kafka -u

Вот и все!

Установка Kafka на CentOS/Fedora/RHEL

Создаем пользователя 

Поскольку Kafka может обрабатывать запросы через сеть, вам следует создать для нее выделенного пользователя.

Примечание. После настройки Apache Kafka рекомендуется создать другого пользователя без полномочий root для выполнения других задач на этом сервере.

В качестве пользователя root создайте пользователя с именем kafka с помощью команды:

# useradd kafka -m

Назначим пароль для созданного пользователя:

# passwd kafka

После этого, созданного юзера вносим в группу sudo( чтобы иметь привилегии, необходимые для установки зависимостей Кафки). Это можно сделать с помощью команды:

# usermod -aG wheel kafka

Теперь ваш пользователь готов. Залогинимся в него:

# su - kafka

Устанавка Java

Если не знаете как выполнить установку Java, JRE — вот мануалы:

Установка JAVA (JDK) на CentOS/RHEL/Fedora

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

Устанавка ZooKeeper

Если не знаете как выполнить установку ZooKeeper — вот мануал:

Установка ZooKeeper в Unix/Linux

По умолчанию он будет прослушивать 2181 порт. Чтобы убедиться, что он работает, подключитесь к нему через Telnet:

# telnet localhost 2181

Вводим слово и нажимаем «enter»:

ruok

Если все работает, то должны получить:

imok

После чего, сеанс сам завершиться.

Устанавка Kafka

Теперь, когда установлены Java и ZooKeeper, настало время загрузить и распаковать Kafka.

$ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz"

PS: Вышла новая версия ПО и ее можно скачать (на момент обновления статьи):

$ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/1.0.0/kafka-1.0.0-src.tgz"

Выполняем распаковку:

#  tar xfvz kafka_*tgz -C /usr/local/

PS: Опция «—strip 1» дает возможность не создавать папку, а распаковать все содержимое в текущее место.

Переименуем папку для удобства использования:

# mv /usr/local/kafka_* /usr/local/kafka

Переходим к настройке.

Настройка Kafka

Открываем:

# vim /usr/local/kafka/config/server.properties

По умолчанию, Kafka не позволяет удалять темы. Чтобы иметь возможность удалять темы, добавьте следующую строку в конец файла или, найдите и расскоментируйте данную строку (у меня это 24-я строка):

delete.topic.enable = true

Сохраняем и закрываем файл.

Запускаем скрипт kafka-server-start.sh, используя nohup, чтобы запустить сервер Kafka (также называемый брокер Kafka) в качестве фонового процесса, который не зависит от сеанса оболочки:

# nohup /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /var/log/kafka.log 2>&1 &

Подождите несколько секунд и сервер запустится. Чтобы быть уверенным что сервер успешно запущен, проверим kafka.log лог-файл:

...
[2017-04-09 01:35:37,019] INFO starting (kafka.server.KafkaServer)
[2017-04-09 01:35:37,024] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
[2017-04-09 01:35:37,048] INFO Starting ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
[2017-04-09 01:35:37,076] INFO Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:host.name=localhost.localdomain (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.version=1.8.0_121 (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.vendor=Oracle Corporation (org.apache.zookeeper.ZooKeeper)
[2017-04-09 01:35:37,076] INFO Client environment:java.home=/usr/java/jdk1.8.0_121/jre (org.apache.zookeeper.ZooKeeper)
.....
[2017-04-09 01:35:37,943] INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)
[2017-04-09 01:35:38,376] INFO Registered broker 0 at path /brokers/ids/0 with addresses: EndPoint(localhost.localdomain,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
....

Теперь у вас есть сервер Kafka, который прослушивает 9092 порт.

Тестирование Kafka

Давайте теперь опубликуем и используем сообщение «Hello, man», чтобы убедиться, что сервер Kafka работает правильно.

Для публикации сообщений вы должны создать «продюсера» для Kafka. Вы можете легко создать это прямо из командной строки, используя скрипт kafka-console-producer.sh:

$ echo "Hello, man" | /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Поскольку темы не существует, Кафка создаст ее автоматически.

Чтобы потреблять сообщения, вы можете создать потребителя Kafka, используя kafka-console-consumer.sh скрипт.

Следующая команда использует сообщения из опубликованной темы. Обратите внимание на использование флага -from-beginning, который присутствует.  Данный параметр покажет сообщение до запуска самого потребителя:

$ /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

Т.к я запускал несколько раз kafka-console-producer.sh, то получил следующее:

Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
Hello, World
Hello, World
Hello, man

Как видим, что все работает отлично!

Установка KafkaT

KafkaT — это небольшой инструмент от Airbnb, который упрощает просмотр информации о вашем кластере Kafka, а также выполняет несколько административных задач из командной строки. Поскольку он написанный на Ruby, то для его использования вам понадобится Ruby. Вам также понадобится необходимые  пакеты. Установите все необходимое с помощью следующей команды:

# yum install ruby ruby-devel rubygems gcc gcc-c++ make openssl-devel ibxml2 libxml2-devel libxslt libxslt-devel kernel-devel   -y

И сейчас, выполняем установку KafkaT:

# gem install kafkat --source https://rubygems.org --no-ri --no-rdoc

Получил ошибку:

ERROR:  Error installing kafkat:
	highline requires Ruby version >= 1.9.3.

Исправляем:

Установка Ruby (несколько версий Ruby) в Unix/Linux

Используйте текстовый редактор для создания нового файла:

# vim ~/.kafkatcfg

Это файл конфигурации, который KafkaT использует для определения каталогов установки и папки, где находятся логи от Kafka. Соответственно, добавьте следующие строки:

{
"kafka_path": "/usr/local/kafka",
"log_path": "/var/log/kafka-logs",
"zk_path": "localhost:2181"
}

PS: Директория «/tmp/kafka-logs» должна быть созданной и иметь чтение-запись!

Теперь вы готовы использовать KafkaT. Для начала рассмотрим, как вы будете использовать его для просмотра деталей всех разделов Kafka:

$ kafkat partitions

Вы должны увидеть следующий результат:

Topic		Partition	Leader		Replicas						ISRs						
TutorialTopic	0		0		[0]							[0]

PS: Можно построить multi-broker кластер.  Кроме того, вы должны внести следующие изменения в файл server.properties в каждом из них:

  • Значение свойства broker.id должно быть изменено таким образом, чтобы оно было уникальным во всем кластерах
  • Значение свойства zookeeper.connect должно быть изменено таким образом, чтобы все узлы указывали на тот же экземпляр ZooKeeper
  • Если вы хотите иметь несколько экземпляров ZooKeeper для вашего кластера, значение свойства zookeeper.connect на каждом узле должно быть идентичным, разделенным запятыми строкой, в которой перечислены IP-адреса и номера портов для всех экземпляров ZooKeeper.

Теперь, когда все установки сделаны, вы можете снять права администратора (суперпользователя) kafka. Для начала выйдите с оболочки или используйте другого пользователя чтобы сделать следующее действия. Удаляем пользователя kafka из группы sudo:

# groupmems -g wheel -d kafka

Чтобы еще больше повысить безопасность вашего сервера Kafka, заблокируйте пароль пользователя kafka с помощью команды passwd. Это гарантирует, что никто не сможет напрямую войти через данного пользователя:

# passwd kafka -l

На данный момент только root или пользователь sudo могут войти в систему под именем kafka, введя следующую команду:

# su - kafka

В будущем, если вы хотите разблокировать его, используйте passwd с ключом «-u»:

# passwd kafka -u

Вот и все!

Установка Kafka на Mac OS X

Устанавливаем Homebrew:

Установка Homebrew на Mac OS X

Для поиска используем команду:

$ brew search kafka

И, устанавливаем нужные пакеты. Я не использовал kafka на Mac OS X. По этому, не могу описать подробную инструкцию.

Статья «Установка Kafka в Unix/Linux» завершена. В следующих статьях, я планировал собрать кластер с Kafka. Но на все времени нет, напишу когда будет время 😉

One thought on “Установка Kafka в Unix/Linux

  1. Обновите пожалуйста (при установке) команду:

    $ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz"

    На:

    $ cd /usr/local/src && wget "http://apache.cp.if.ua/kafka/1.0.0/kafka-1.0.0-src.tgz"

    PS: Tсли я не ошибаюсь то вышла новая версия.
    спасибо )

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *