One place for hosting & domains

      Установка Apache Kafka на Ubuntu 18.04


      Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

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

      Система рассылки сообщений издатель/подписчик позволяет одному или нескольким производителям публиковать сообщения без учета количества потребителей или того, как эти потребители будут обрабатывать сообщения. Подписанные клиенты уведомляются автоматически об обновлениях и создании новых сообщений. Эта система является более эффективной и масштабируемой по сравнению с системами, где клиенты периодически выполняют опрос, чтобы определить, доступны ли новые сообщения.

      В этом руководстве вы установите и будете использовать Apache Kafka 2.1 на Ubuntu 18.04.

      Предварительные требования

      Чтобы выполнить описанные ниже шаги, вам потребуется следующее:

      • Один сервер Ubuntu 18.04 и пользователь без прав root с привилегиями sudo. Выполните действия, описанные в этом руководстве, если у вас нет пользователя без прав root.
      • Минимум 4 ГБ оперативной памяти на сервере. Установка без необходимого объема оперативной памяти может сбои в работе Kafka, когда виртуальная машины Java (JVM) будет выбрасывать исключение «Out Of Memory» в ходе запуска.
      • OpenJDK 8, установленный на вашем сервере. Чтобы выполнить установку этой версии, выполните эти инструкции по установке требуемых версий OpenJDK. Kafka написана на Java, поэтому для работы ей требуется JVM; однако скрипт запуска оболочки имеет недостаток, который не позволяет запускать ее с JVM выше 8 версии.

      Шаг 1 — Создание пользователя для Kafka

      Поскольку Kafka может обрабатывать запросы через сеть, вам следует создать для нее специального пользователя. Это позволит снизить ущерб для вашей машины на Ubuntu, если сервер Kafka будет скомпрометирован. Мы создадим специального пользователя kafka на этом шаге, но вам нужно создать другого пользователя без прав root для выполнения других задач на этом сервере после завершения настройки Kafka.

      Выполните вход с помощью пользователя без прав root с привилегиями sudo и создайте пользователя kafka с помощью команды useradd:

      Флаг -m гарантирует, что для пользователя будет создана домашняя директория. Эта домашняя директория /home/kafka будет выполнять роль директории нашего рабочего пространства для выполнения команд, описанных ниже.

      Установите пароль с помощью команды passwd:

      Добавьте пользователя kafka в группу sudo с помощью команды adduser, чтобы предоставить ему права на установку зависимостей Kafka:

      Ваш пользователь kafka готов к работе. Выполните вход в учетную запись с помощью команды su:

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

      Шаг 2 — Загрузка и извлечение двоичных файлов Kafka

      Давайте загрузим и извлечем двоичные файлы Kafka в специальные папки в домашней директории пользователя kafka.

      Сначала создайте директорию в /home/kafka с названием Downloads, чтобы сохранить там загруженные данные:

      Воспользуйтесь curl для загрузки двоичных файлов Kafka:

      • curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

      Создайте директорию с названием kafka и замените ее на эту директорию. Она будет служить базовой директорией для установки Kafka:

      • mkdir ~/kafka && cd ~/kafka

      Извлеките архив, который вы загрузили, с помощью команды tar:

      • tar -xvzf ~/Downloads/kafka.tgz --strip 1

      Мы указали флаг --strip 1 для обеспечения того, что содержимое архива будет извлечено в саму директорию ~/kafka/ и ни в какую другую директорию (например, ~/kafka/kafka_2.11-2.1.1/) внутри нее.

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

      Шаг 3 — Настройка сервера Kafka

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

      Опции конфигурации Kafka указаны в файле server.properties. Откройте файл в nano или вашем любимом редакторе:

      • nano ~/kafka/config/server.properties

      Давайте добавим настройку, которая позволит нам удалять темы Kafka. Добавьте следующую строку внизу файла:

      ~/kafka/config/server.properties

      delete.topic.enable = true
      

      Сохраните файл и закройте nano. Теперь, когда мы настроили Kafka, мы можем перейти к созданию файлов systemd.unit для запуска и их активации при запуске службы.

      Шаг 4 — Создание файлов systemd.unit и запуск сервера Kafka

      В этом шаге мы создадим файлы systemd.unit для службы Kafka. Это поможет нам выполнять такие действия, как запуск, остановка и перезапуск Kafka, совместимым с другими службами Linux образом.

      Zookeeper — это служба, которую использует Kafka для управления состоянием кластера и конфигурациями. Она широко используется во многих распределенных системах в качестве неотъемлемого компонента. Если вы хотите подробнее познакомиться с Zookeeper, изучите официальную документацию по Zookeeper.

      Создайте unit-файл для zookeeper:

      • sudo nano /etc/systemd/system/zookeeper.service

      Введите следующее определение unit в файле:

      /etc/systemd/system/zookeeper.service

      [Unit]
      Requires=network.target remote-fs.target
      After=network.target remote-fs.target
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
      ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      В разделе [Unit] указывается, что для начала работы Zookeeper требуется подготовить сетевое подключение и файловую систему.

      В разделе [Service] указывается, что systemd использует файлы оболочки zookeeper-server-start.sh​​​​​​ и ​​​​​​zookeeper-server-stop.sh для запуска и остановки службы. В нем также указывается, что Zookeeper автоматически перезапускается в случае аварийного завершения работы.

      Затем создайте системный сервисный файл для kafka:

      • sudo nano /etc/systemd/system/kafka.service

      Введите следующее определение unit в файле:

      /etc/systemd/system/kafka.service

      [Unit]
      Requires=zookeeper.service
      After=zookeeper.service
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
      ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      В разделе [Unit] указывается, что этот unit является зависимым от zookeeper.service. Это позволит автоматически запускать zookeeper после запуска службы kafka.

      В разделе [Service] указывается, что systemd использует файлы оболочки kafka-server-start.sh и kafka-server-stop.sh для запуска и остановки службы. В нем также указывается, что Kafka автоматически перезапускается в случае аварийного завершения работы.

      После определения всех юнитов выполните запуск Kafka с помощью следующей команды:

      • sudo systemctl start kafka

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

      Вывод должен выглядеть примерно следующим образом:

      Output

      Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

      Теперь у вас есть сервер Kafka, который подключен к порту 9092.

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

      • sudo systemctl enable kafka

      Теперь, когда мы запустили и активировали службы, нужно проверить установку.

      Шаг 5 — Тестирование установки

      Давайте опубликуем и получим сообщение Hello World, чтобы убедиться, что сервер Kafka ведет себя корректно. Для публикации сообщений в Kafka требуется следующее:

      • Издатель, который позволяет публиковать записи и данные в темах.
      • Подписчик, который считывает сообщения и данные из темы.

      Сначала создайте тему с названием TutorialTopic, введя следующую команду:

      • ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

      Вы можете создать издателя из командной строки с помощью скрипта 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-console-consumer.sh. Ему требуется имя хоста сервера ZooKeeper, порт и название темы в качестве аргументов.

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

      • ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

      Если проблемы конфигурации отсутствуют, вы должны увидеть Hello, World в своем терминале:

      Output

      Hello, World

      Скрипт продолжит работать и будет ждать, когда будут опубликованы новые сообщения для темы. Вы можете открыть новый терминал и запустить издателя для нескольких новых сообщений. Вы должны увидеть все сообщения в выводе подписчика.

      После окончания тестирование нажмите CTRL+C, чтобы остановить скрипт подписчика. Теперь, когда мы протестировали установку, можно переходить к установке KafkaT.

      Шаг 6 — Установка KafkaT (необязательно)

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

      • sudo apt install ruby ruby-dev build-essential

      Теперь вы можете выполнить установку KafkaT с помощью команды gem:

      KafkaT использует .kafkatcfg в качестве файла конфигурации для определения директорий и логов на вашем сервере Kafka. Также нужно добавить запись, указывающую KafkaT путь к экземпляру ZooKeeper.

      Создайте новый файл .kafkatcfg:

      Добавьте следующие строки для указания требуемой информации о вашем сервере Kafka и экземпляре Zookeeper:

      ~/.kafkatcfg

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

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

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

      Output

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

      Вы увидите TutorialTopic, а также __consumer_offsets, т.е. внутреннюю тему, которая используется в Kafka для хранения информации о клиентах. Вы можете спокойно игнорировать строки, начинающиеся с __consumer_offsets.

      Чтобы узнать больше о KafkaT, перейдите в соответствующий репозиторий на GitHub.

      Шаг 7 — Настройка многоузлового кластера (необязательно)

      Если вы хотите создать кластер с несколькими брокерами, использующий несколько серверов на Ubuntu 18.04, повторите шаги 1, 4 и 5 для каждой новой машины. Кроме того, вам нужно внести следующие изменения в файл server.properties:

      • Значение свойства broker.id должно быть уникальным внутри кластера. Это свойство служит уникальным идентификатором каждого сервера в кластере и может содержать любую строку в качестве значения. Например, ​​​​​​server1​​​​​​, ​​​​​server2​​​ и т.д.

      • Значение свойства zookeeper.connect необходимо изменить таким образом, чтобы все узлы указывали на один экземпляр ZooKeeper. Это свойство указывает адрес экземпляра в Zookeeper и соответствует формату <HOSTNAME/IP_ADDRESS>:<PORT>. Например, «203.0.113.0:2181», «203.0.113.1:2181» и т. д.

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

      Шаг 8 — Ограничение для пользователя Kafka

      Теперь, когда все установки выполнены, вы можете удалить права администратора пользователя kafka. Прежде чем сделать это, выйдите и войдите снова с помощью любого пользователя без прав root с привилегиями sudo. Если вы все еще используете один сеанс командной строки, которой вы запустили в начале прохождения руководства, просто введите exit.

      Удалите пользователя kafka из группы sudo:

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

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

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

      Вы успешно ограничили права администратора пользователя kafka.

      Заключение

      Теперь на вашем сервере Ubuntu безопасно запущена служба Apache Kafka. Вы можете использовать ее в своих проектах, создав издателей и подписчиков Kafka с помощью клиентов Kafka, которые доступны для большинства языков программирования. Чтобы узнать больше о Kafka, вы можете ознакомиться с документацией.



      Source link

      How To Install Apache Kafka on Debian 10


      The author selected the Free and Open Source Fund to receive a donation as part of the Write for DOnations program.

      Introduction

      Apache Kafka is a popular distributed message broker designed to handle large volumes of real-time data. A Kafka cluster is highly scalable and fault-tolerant, and also has a much higher throughput compared to other message brokers such as ActiveMQ and RabbitMQ. Though it is generally used as a publish/subscribe messaging system, a lot of organizations also use it for log aggregation because it offers persistent storage for published messages.

      A publish/subscribe messaging system allows one or more producers to publish messages without considering the number of consumers or how they will process the messages. Subscribed clients are notified automatically about updates and the creation of new messages. This system is more efficient and scalable than systems where clients poll periodically to determine if new messages are available.

      In this tutorial, you will install and configure Apache Kafka 2.1.1 securely on a Debian 10 server, then test your setup by producing and consuming a Hello World message. You will then optionally install KafkaT to monitor Kafka and set up a Kafka multi-node cluster.

      Prerequisites

      To follow along, you will need:

      Note: Installations without 4GB of RAM may cause the Kafka service to fail, with the Java virtual machine (JVM) throwing an Out Of Memory exception during startup.

      Step 1 — Creating a User for Kafka

      Since Kafka can handle requests over a network, it is a best practice to create a dedicated user for it. This minimizes damage to your Debian machine should the Kafka server be compromised. You will create the dedicated user kafka in this step.

      Logged in as your non-root sudo user, create a user called kafka with the useradd command:

      The -m flag ensures that a home directory will be created for the user. This home directory, /home/kafka, will act as your workspace directory for executing commands later on.

      Set the password using passwd:

      Enter the password you wish to use for this user.

      Next, add the kafka user to the sudo group with the adduser command, so that it has the privileges required to install Kafka’s dependencies:

      Your kafka user is now ready. Log into this account using su:

      Now that you’ve created the Kafka-specific user, you can move on to downloading and extracting the Kafka binaries.

      Step 2 — Downloading and Extracting the Kafka Binaries

      In this step, you will download and extract the Kafka binaries into dedicated folders in your kafka user’s home directory.

      To start, create a directory in /home/kafka called Downloads to store your downloads:

      Next, install curl using apt-get so that you’ll be able to download remote files:

      • sudo apt-get update && sudo apt-get install curl

      When prompted, type Y to confirm the curl download.

      Once curl is installed, use it to download the Kafka binaries:

      • curl "https://archive.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

      Create a directory called kafka and change to this directory. This will be the base directory of the Kafka installation:

      • mkdir ~/kafka && cd ~/kafka

      Extract the archive you downloaded using the tar command:

      • tar -xvzf ~/Downloads/kafka.tgz --strip 1

      You specified the --strip 1 flag to ensure that the archive’s contents are extracted in ~/kafka/ itself and not in another directory inside of it, such as ~/kafka/kafka_2.12-2.1.1/.

      Now that you’ve downloaded and extracted the binaries successfully, you can move on to configuring Kafka to allow for topic deletion.

      Step 3 — Configuring the Kafka Server

      Kafka’s default behavior will not allow us to delete a topic, the category, group, or feed name to which messages can be published. To modify this, you will edit the configuration file.

      Kafka’s configuration options are specified in server.properties. Open this file with nano or your favorite editor:

      • nano ~/kafka/config/server.properties

      Let’s add a setting that will allow us to delete Kafka topics. Add the following highlighted line to the bottom of the file:

      ~/kafka/config/server.properties

      ...
      group.initial.rebalance.delay.ms
      
      delete.topic.enable = true
      

      Save the file, and exit nano. Now that you’ve configured Kafka, you can create systemd unit files for running and enabling Kafka on startup.

      Step 4 — Creating Systemd Unit Files and Starting the Kafka Server

      In this section, you will create systemd unit files for the Kafka service. This will help you perform common service actions such as starting, stopping, and restarting Kafka in a manner consistent with other Linux services.

      ZooKeeper is a service that Kafka uses to manage its cluster state and configurations. It is commonly used in distributed systems as an integral component. In this tutorial, you will use Zookeeper to manage these aspects of Kafka. If you would like to know more about it, visit the official ZooKeeper docs.

      First, create the unit file for zookeeper:

      • sudo nano /etc/systemd/system/zookeeper.service

      Enter the following unit definition into the file:

      /etc/systemd/system/zookeeper.service

      [Unit]
      Requires=network.target remote-fs.target
      After=network.target remote-fs.target
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
      ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      The [Unit] section specifies that ZooKeeper requires networking and for the filesystem to be ready before it can start.

      The [Service] section specifies that systemd should use the zookeeper-server-start.sh and zookeeper-server-stop.sh shell files for starting and stopping the service. It also specifies that ZooKeeper should be restarted automatically if it exits abnormally.

      Next, create the systemd service file for kafka:

      • sudo nano /etc/systemd/system/kafka.service

      Enter the following unit definition into the file:

      /etc/systemd/system/kafka.service

      [Unit]
      Requires=zookeeper.service
      After=zookeeper.service
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
      ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      The [Unit] section specifies that this unit file depends on zookeeper.service. This will ensure that zookeeper gets started automatically when the kafka service starts.

      The [Service] section specifies that systemd should use the kafka-server-start.sh and kafka-server-stop.sh shell files for starting and stopping the service. It also specifies that Kafka should be restarted automatically if it exits abnormally.

      Now that the units have been defined, start Kafka with the following command:

      • sudo systemctl start kafka

      To ensure that the server has started successfully, check the journal logs for the kafka unit:

      You will see output similar to the following:

      Output

      Mar 23 13:31:48 kafka systemd[1]: Started kafka.service.

      You now have a Kafka server listening on port 9092, which is the default port for Kafka.

      You have started the kafka service, but if you were to reboot your server, it would not yet be started automatically. To enable kafka on server boot, run:

      • sudo systemctl enable kafka

      Now that you’ve started and enabled the services, it’s time to check the installation.

      Step 5 — Testing the Installation

      Let’s publish and consume a Hello World message to make sure the Kafka server is behaving correctly. Publishing messages in Kafka requires:

      • A producer, which enables the publication of records and data to topics.
      • A consumer, which reads messages and data from topics.

      First, create a topic named TutorialTopic by typing:

      • ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

      You can create a producer from the command line using the kafka-console-producer.sh script. It expects the Kafka server’s hostname, port, and a topic name as arguments.

      Publish the string Hello, World to the TutorialTopic topic by typing:

      • echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

      The --broker-list flag determines the list of message brokers to send the message to, in this case localhost:9092. --topic designates the topic as TutorialTopic.

      Next, you can create a Kafka consumer using the kafka-console-consumer.sh script. It expects the ZooKeeper server’s hostname and port and a topic name as arguments.

      The following command consumes messages from TutorialTopic. Note the use of the --from-beginning flag, which allows the consumption of messages that were published before the consumer was started:

      • ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server `localhost:9092` --topic TutorialTopic --from-beginning

      --bootstrap-server provides a list of ingresses into the Kafka cluster. In this case, you are using localhost:9092.

      You will see Hello, World in your terminal:

      Output

      Hello, World

      The script will continue to run, waiting for more messages to be published to the topic. Feel free to open a new terminal and start a producer to publish a few more messages. You should be able to see them all in the consumer’s output. If you’d like to learn more about how to use Kafka, see the official Kafka documentation.

      When you are done testing, press CTRL+C to stop the consumer script. Now that you have tested the installation, you can move on to installing KafkaT in order to better administer your Kafka cluster.

      Step 6 — Installing KafkaT (Optional)

      KafkaT is a tool from Airbnb that makes it easier for you to view details about your Kafka cluster and perform certain administrative tasks from the command line. Because it is a Ruby gem, you will need Ruby to use it. You will also need the build-essential package to be able to build the other gems it depends on. Install them using apt:

      • sudo apt install ruby ruby-dev build-essential

      You can now install KafkaT using the gem command:

      • sudo CFLAGS=-Wno-error=format-overflow gem install kafkat

      The CFLAGS=-Wno-error=format-overflow option disables format overflow warnings and is required for the ZooKeeper gem, which is a dependency of KafkaT.

      KafkaT uses .kafkatcfg as the configuration file to determine the installation and log directories of your Kafka server. It should also have an entry pointing KafkaT to your ZooKeeper instance.

      Create a new file called .kafkatcfg:

      Add the following lines to specify the required information about your Kafka server and Zookeeper instance:

      ~/.kafkatcfg

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

      You are now ready to use KafkaT. For a start, here’s how you would use it to view details about all Kafka partitions:

      You will see the following output:

      Output

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

      This output shows TutorialTopic, as well as __consumer_offsets, an internal topic used by Kafka for storing client-related information. You can safely ignore lines starting with __consumer_offsets.

      To learn more about KafkaT, refer to its GitHub repository.

      Now that you have installed KafkaT, you can optionally set up Kafka on a cluster of Debian 10 servers to make a multi-node cluster.

      Step 7 — Setting Up a Multi-Node Cluster (Optional)

      If you want to create a multi-broker cluster using more Debian 10 servers, repeat Step 1, Step 4, and Step 5 on each of the new machines. Additionally, make the following changes in the ~/kafka/config/server.properties file for each:

      • Change the value of the broker.id property such that it is unique throughout the cluster. This property uniquely identifies each server in the cluster and can have any string as its value. For example, "server1", "server2", etc., would be useful as identifiers.

      • Change the value of the zookeeper.connect property such that all nodes point to the same ZooKeeper instance. This property specifies the ZooKeeper instance’s address and follows the <HOSTNAME/IP_ADDRESS>:<PORT> format. For this tutorial, you would use your_first_server_IP:2181, replacing your_first_server_IP with the IP address of the Debian 10 server you already set up.

      If you want to have multiple ZooKeeper instances for your cluster, the value of the zookeeper.connect property on each node should be an identical, comma-separated string listing the IP addresses and port numbers of all the ZooKeeper instances.

      Note: If you have a firewall activated on the Debian 10 server with Zookeeper installed, make sure to open up port 2181 to allow for incoming requests from the other nodes in the cluster.

      Step 8 — Restricting the Kafka User

      Now that all of the installations are done, you can remove the kafka user’s admin privileges. Before you do so, log out and log back in as any other non-root sudo user. If you are still running the same shell session you started this tutorial with, simply type exit.

      Remove the kafka user from the sudo group:

      To further improve your Kafka server’s security, lock the kafka user’s password using the passwd command. This makes sure that nobody can directly log into the server using this account:

      At this point, only root or a sudo user can log in as kafka by typing in the following command:

      In the future, if you want to unlock it, use passwd with the -u option:

      You have now successfully restricted the kafka user’s admin privileges.

      Conclusion

      You now have Apache Kafka running securely on your Debian server. You can make use of it in your projects by creating Kafka producers and consumers using Kafka clients, which are available for most programming languages. To learn more about Kafka, you can also consult the Apache Kafka documentation.



      Source link

      Como instalar o Apache Kafka no Ubuntu 18.04


      O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O Apache Kafka é um message broker popularmente distribuído projetado para lidar de forma eficiente com grandes volumes de dados em tempo real. Um cluster Kafka é não só altamente escalável e tolerante a falhas, mas ele também tem uma taxa de transferência muito mais alta comparada com outros message brokers como o ActiveMQ e o RabbitMQ. Embora ele seja geralmente usado como um sistema de mensagens publicar/assinar, muitas organizações também o usam para a agregação de registros porque ele oferece armazenamento persistente para mensagens publicadas.

      Um sistema de mensagens publicar/assinar permite que um ou mais produtores publiquem mensagens sem considerar o número de consumidores ou como irão processar as mensagens. Clientes assinantes são notificados automaticamente sobre atualizações e a criação de novas mensagens. Este sistema é mais eficiente e escalável do que sistemas onde clientes questionam periodicamente para determinar se novas mensagens estão disponíveis.

      Neste tutorial, você instalará e usará o Apache Kafka 2.1.1 no Ubuntu 18.04.

      Pré-requisitos

      Para acompanhar, você precisará de:

      • Um servidor Ubuntu 18.04 e um usuário que não seja o root com privilégios sudo. Siga os passos especificados neste guia se não tiver um usuário que não seja root configurado.
      • Pelo menos 4GB de RAM no servidor. As instalações sem essa quantidade de RAM podem fazer com que o serviço Kafka falhe, com a máquina virtual Java (JVM) que lança uma exceção “Fora de Memória” durante a inicialização.
      • OpenJDK 8 instalado no seu servidor. Para instalar essa versão, siga essas instruções sobre a instalação de versões específicas do OpenJDK. O Kafka está escrito em Java, de modo que ele exige um JVM; no entanto, o script de inicialização shell possui um erro de detecção de versão que faz com que ele não comece com versões JVM acima de 8.

      Passo 1 — Criando um Usuário para o Kafka

      Uma vez que o Kafka pode lidar com pedidos em uma rede, você deve criar um usuário dedicado para ele. Isso minimiza os danos na sua máquina Ubuntu caso o servidor Kafka seja comprometido. Criaremos um usuário *kafka *dedicado neste passo, mas você deve criar um usuário que não seja root para executar outras tarefas neste servidor uma vez que você tenha terminado de configurar o Kafka.

      Logado como usuário sudo que não seja root, crie um usuário chamado kafka com o comando useradd:

      A flag -m garante que um diretório home seja criada para o usuário. Este diretório home, /home/kafka, agirá como nossa pasta de trabalho para executar comandos nas seções abaixo.

      Defina a senha usando passwd:

      Adicione o usuário *kafka *ao grupo sudo com o comando adduser, de modo que ele tenha os privilégios necessários para instalar as dependências do Kafka:

      Seu usuário** kafka** agora está pronto. Logue nesta conta usando su:

      Agora que criamos o usuário específico do Kafka, podemos seguir para o download e extração dos binários Kafka.

      Vamos baixar e extrair os binários Kafka em pastas dedicadas no diretório home do nosso usuário kafka.

      Para começar, crie uma pasta em /home/kafka chamada Downloads para armazenar os seus downloads:

      Use curl para baixar os binários Kafka:

      • curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

      Crie um diretório chamado kafka e mude para este diretório. Este é o diretório base da instalação do Kafka:

      • mkdir ~/kafka && cd ~/kafka

      Extraia o arquivo que você baixou usando o comando tar:

      • tar -xvzf ~/Downloads/kafka.tgz --strip 1

      Especificamos a flag --strip 1 para garantir que o conteúdo do arquivo seja extraído efetivamente em ~/kafka/ e não em outro diretório (como ~/kafka/kafka_2.11-2.1.1/) dentro dele.

      Agora que baixamos e extraímos os binários com sucesso, podemos começar a configurar para que o Kafka permita que deletemos tópicos.

      Passo 3 — Configurando o Servidor do Kafka

      O comportamento padrão do Kafka não nos permitirá excluir um um_ tópico_, a categoria, grupo ou nome do feed para os quais mensagens podem ser publicadas. Para modificar isso, vamos editar o arquivo de configuração.

      As opções de configuração do Kafka são especificadas em server.properties. Abra este arquivo com o nano ou seu editor favorito:

      • nano ~/kafka/config/server.properties

      Vamos adicionar um valor que nos permitirá excluir tópicos do Kafka. Adicione o seguinte ao final do arquivo:

      ~/kafka/config/server.properties

      delete.topic.enable = true
      

      Salve o arquivo e saia do nano. Agora que configuramos o Kafka, podemos seguir para a criação de arquivos de unidade systemd para a executá-lo e permiti-lo na inicialização.

      Passo 4 — Criando Arquivos de Unidade Systemd e Iniciando o Servidor do Kafka

      Nesta seção, criaremos arquivos de unidade systemd para o serviço do Kafka. Isso nos ajudará a realizar ações de serviço comuns como iniciar, parar e reiniciar o Kafka de uma maneira consistente com outros serviços do Linux.

      O Zookeeper é um serviço que o Kafka usa para gerenciar seu estado de cluster e configurações. É geralmente usado em muitos sistemas distribuídos como um componente integral. Se você quer saber mais sobre isso, visite os documentos Zookeeper oficiais.

      Crie o arquivo de unidade para o zookeeper:

      • sudo nano /etc/systemd/system/zookeeper.service

      Digite a seguinte definição de unidade no arquivo:

      /etc/systemd/system/zookeeper.service

      [Unit]
      Requires=network.target remote-fs.target
      After=network.target remote-fs.target
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
      ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      A seção [Unit] especifica que o Zookeeper exige conexão em rede e que o sistema de arquivos esteja pronto antes de começar.

      A seção [Service] especifica que o systemd deve usar os arquivos de shell zookeeper-server-start.sh e zookeeper-server-start.sh para começar e parar o serviço. Ele também especifica que o Zookeeper deve ser reiniciado automaticamente se ele fechar inexplicavelmente.

      A seguir, crie o arquivo de serviço systemd para o kafka:

      • sudo nano /etc/systemd/system/kafka.service

      Digite a seguinte definição de unidade no arquivo:

      /etc/systemd/system/kafka.service

      [Unit]
      Requires=zookeeper.service
      After=zookeeper.service
      
      [Service]
      Type=simple
      User=kafka
      ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
      ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
      Restart=on-abnormal
      
      [Install]
      WantedBy=multi-user.target
      

      A seção [Unit] especifica que este arquivo de unidade depende do zookeeper.service. Isso irá garantir que o zookeeper seja iniciado automaticamente quando o serviço kafka começar.

      A seção [Service] especifica que o systemd deve usar os arquivos de shell kafka-server-start.sh e kafka-server-stop.sh para começar e parar o serviço. Ele também especifica que o Zookeeper deve ser reiniciado automaticamente se ele fechar inexplicavelmente.

      Agora que as unidades foram definidas, inicie o Kafka com o comando a seguir:

      • sudo systemctl start kafka

      Para garantir que o servidor inicializou com sucesso, verifique os registros de diário para a unidade kafka:

      Você deve ver um resultado similar ao seguinte:

      Output

      Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

      Agora, você tem um servidor do Kafka escutando na porta 9092.

      Enquanto inicializávamos o serviço kafka, se nós pudéssemos reiniciar nosso servidor, ele não seria iniciado automaticamente. Para ativar o kafka na inicialização do servidor, execute:

      • sudo systemctl enable kafka

      Agora que começamos e ativamos os serviços, vamos verificar a instalação.

      Passo 5 — Testando a Instalação

      Vamos publicar e consumir uma mensagem “Hello World” para garantir que o servidor do Kafka está se comportando corretamente. Publicando mensagens no Kafka exige:

      • Um produtor que permite a publicação de registros e dados em tópicos.
      • Um consumidor que lê mensagens e dados de tópicos.

      Primeiro, crie um tópico chamado TutorialTopic digitando:

      • ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

      Você pode criar um produtor a partir da linha de comando usando o script kafka-console-producer.sh. Ele recebe o nome do host do servidor do Kafka, porta e um nome de tópico como argumentos.

      Publique o string "Hello, World" no tópico TutorialTopic digitando:

      • echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

      A seguir, você pode criar um consumidor no Kafka usando o script kafka-console-consumer.sh. Ele recebe o nome do host e porta do servidor ZooKeeper, junto com um nome de tópico como argumentos.

      O comando a seguir consome mensagens do TutorialTopic. Observe o uso da flag --from-beginning que permite o consumo de mensagens que foram publicadas antes do início do consumidor:

      • ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

      Se não houver problemas de configuração, você deve ver Hello, World no seu terminal:

      Output

      Hello, World

      O script continuará a executar, esperando que mais mensagens sejam publicadas no tópico. Sinta-se à vontade para abrir um novo terminal e iniciar um produtor para publicar mais algumas mensagens. Você deve poder ver todas elas na saída do consumidor.

      Quando você acabar os testes, pressione CTRL+C para parar o script do consumidor. Agora que testamos a instalação, vamos prosseguir para a instalação do KafkaT.

      Passo 6 — Instalar o KafkaT (Opcional)

      O KafkaT é uma ferramenta do Airbnb que torna mais fácil para você ver detalhes sobre seu cluster do Kafka e executar certas tarefas administrativas da linha de comando. Uma vez que é uma gem Ruby, você precisará do Ruby para usá-la. Você também precisará do pacote build-essential para poder construir outras gems das quais ele depende. Instale-os usando o apt:

      • sudo apt install ruby ruby-dev build-essential

      Agora, você pode instalar o KafkaT usando o comando gem:

      O KafkaT usa .kafkatcfg como o arquivo de configuração para determinar os diretórios e registro da instalação do seu servidor do Kafka. Ele também deve ter uma entrada apontando o KafkaT para a sua instância ZooKeeper.

      Crie um arquivo novo chamado .kafkatcfg:

      Adicione as linhas a seguir para especificar as informações necessárias sobre o seu servidor do Kafka e a instância do Zookeeper:

      ~/.kafkatcfg

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

      Agora, você está pronto para usar o KafkaT. Para um começo, veja como você usaria ele para ver os detalhes sobre todas as partições do Kafka:

      Você verá o seguinte resultado:

      Output

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

      Você verá o TutorialTopic, além de __consumer_offsets, um tópico interno usado pelo Kafka para armazenar informações relacionadas ao cliente. Você pode ignorar com segurança linhas começando com __consumer_offsets.

      Para aprender mais sobre o KafkaT, consulte o seu repositório do GitHub.

      Passo 7 — Configurando um Cluster Multi-Nodal (Opcional)

      Se você quer criar um cluster multi-broker usando mais máquinas Ubuntu 18.04, você deve repetir o passo 1, passo 4, e o passo 5 em cada uma das novas máquinas. Além disso, você deve fazer as seguintes alterações no arquivo server.properties para cada um deles:

      • O valor da propriedade broker.id deve ser alterado de modo que ele seja único ao longo do cluster. Esta propriedade identifica separadamente cada servidor no cluster e pode ter qualquer string como seu valor. Por exemplo, "server1", "server2", etc.

      • O valor da propriedade zookeeper.connect deve ser alterado de modo que todos os nós apontem para a mesma instância do ZooKeeper. Esta propriedade especifica o endereço da instância do Zookeeper e segue o formato :<PORT>. Por exemplo, "203.0.113.0:2181", "203.0.113.1:2181" etc.

      Se você quer ter várias instâncias do ZooKeeper para o seu cluster, o valor da propriedade zookeeper.connect em cada nó deve ser uma string idêntica e separada por vírgulas que listem os endereços de IP e os números de porta de todas as instâncias do ZooKeeper.

      Passo 8 — Restringindo o Utilizador do Kafka

      Agora que todas as instalações estão prontas, você pode remover os privilégios de admin do usuário kafka. Antes de fazer isso, saia e logue novamente como se fosse qualquer outro usuário sudo que não seja root. Se você ainda estiver executando a mesma sessão de shell com a qual você tenha iniciado este tutorial, simplesmente digite exit.

      Remova o usuário kafka do grupo sudo:

      Para melhorar ainda mais a segurança do seu servidor Kafka, trave a senha do usuário kafka usando o comando passwd. Isso faz com que ninguém possa logar diretamente no servidor usando essa conta:

      Neste ponto, apenas root ou um usuário sudo pode logar como kafka digitando o comando a seguir:

      No futuro, se você quer destravá-lo, use passwd com a opção -u:

      Agora, você restringiu com sucesso os privilégios de admin do usuário kafka.

      Conclusão

      Agora, você tem o Apache Kafka funcionando com segurança no seu servidor Ubuntu. Você pode usar isso nos seus projetos criando produtores do Kafka e consumidores usando clientes do Kafka, que estão disponíveis para a maioria das linguagens de programação. Para saber mais sobre o Kafka, você também pode consultar a sua documentação.



      Source link