
Установка 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. Но на все времени нет, напишу когда будет время 😉
Обновите пожалуйста (при установке) команду:
На:
PS: Tсли я не ошибаюсь то вышла новая версия.
спасибо )