Установка 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. Но на все времени нет, напишу когда будет время 😉


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

Автору будет очень приятно получить обратную связь.

Комментариев 0