Как да инсталирате Apache Kafka на Ubuntu 20.04


Авторът е избрал програмата Write for DOnations.

Въведение

RabbitMQ. Въпреки че обикновено се използва като система за публикуване/абониране за съобщения, много организации също го използват за събиране на регистрационни файлове, тъй като предлага постоянно съхранение за публикувани съобщения.

Системата за публикуване/абониране на съобщения позволява на един или повече производители да публикуват съобщения, без да вземат предвид броя на потребителите или как ще обработват съобщенията. Абонираните клиенти се уведомяват автоматично за актуализации и създаване на нови съобщения. Тази система е по-ефективна и мащабируема от системите, при които клиентите периодично анкетират, за да определят дали има нови съобщения.

В този урок ще инсталирате и конфигурирате Apache Kafka 2.8.2 на Ubuntu 20.04.

Предпоставки

За да следвате, ще ви трябва:

  • Ръководство за първоначална настройка на сървъра, ако не сте настроили различен от root потребител. Инсталации с по-малко от 4 GB RAM може да доведат до отказ на услугата Kafka.
  • Как да инсталирате Java с APT на Ubuntu 20.04. Kafka е написан на Java, така че изисква JVM.

Стъпка 1 — Създаване на потребител за Kafka

Тъй като Kafka може да обработва заявки през мрежа, първата ви стъпка е да създадете специален потребител за услугата. Това минимизира щетите на вашата Ubuntu машина в случай, че някой компрометира Kafka сървъра. В тази стъпка ще създадете специален потребител на kafka.

Влезте във вашия сървър като не-root потребител на sudo, след което създайте потребител с име kafka:

  1. sudo adduser kafka

Следвайте подканите, за да зададете парола и да създадете потребител на kafka.

След това добавете потребителя kafka към групата sudo с командата adduser. Имате нужда от тези привилегии, за да инсталирате зависимостите на Kafka:

  1. sudo adduser kafka sudo

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

  1. su -l kafka

Сега, след като сте създали потребител, специфичен за Kafka, вие сте готови да изтеглите и извлечете бинарните файлове на Kafka.

Стъпка 2 — Изтегляне и извличане на бинарните файлове на Kafka

В тази стъпка ще изтеглите и извлечете бинарните файлове на Kafka в специални папки в домашната директория на вашия потребител kafka.

За да започнете, създайте директория в /home/kafka, наречена Downloads, за да съхранявате вашите изтегляния:

  1. mkdir ~/Downloads

Използвайте curl, за да изтеглите бинарните файлове на Kafka:

  1. curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz

Създайте директория, наречена kafka, и се преместете в тази директория. Ще използвате тази директория като основна директория на инсталацията на Kafka:

  1. mkdir ~/kafka && cd ~/kafka

Разархивирайте архива, който сте изтеглили, като използвате командата tar:

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

Посочвате флага --strip 1, за да сте сигурни, че съдържанието на архива се извлича в самия ~/kafka/, а не в друга директория (като ~/kafka /kafka_2.13-2.8.2/) вътре в него.

Сега, след като сте изтеглили и извлекли успешно двоичните файлове, можете да започнете да конфигурирате вашия Kafka сървър.

Стъпка 3 — Конфигуриране на сървъра Kafka

Тема на Kafka е категорията, групата или името на емисия, в която могат да се публикуват съобщения. Въпреки това поведението по подразбиране на Kafka няма да ви позволи да изтриете тема. За да промените това, трябва да редактирате конфигурационния файл, което ще направите в тази стъпка.

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

  1. nano ~/kafka/config/server.properties

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

delete.topic.enable = true

Второ, ще промените директорията, където се съхраняват регистрационните файлове на Kafka, като промените свойството log.dirs. Намерете свойството log.dirs и заменете съществуващия маршрут с маркирания маршрут:

log.dirs=/home/kafka/logs

Запазете и затворете файла.

Сега, след като сте конфигурирали Kafka, можете да създадете systemd модулни файлове за стартиране и активиране на сървъра на Kafka при стартиране.

Стъпка 4 — Създаване на модулни файлове systemd и стартиране на сървъра Kafka

В този раздел ще създадете systemd модулни файлове за услугата Kafka. Тези файлове ще ви помогнат да извършвате обичайни сервизни действия като стартиране, спиране и рестартиране на Kafka по начин, съвместим с други услуги на Linux.

Kafka използва официални документи на Zookeeper. Ще използвате Zookeper като услуга с тези модулни файлове.

Създайте единичния файл за zookeeper:

  1. sudo nano /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 shell файлове за стартиране и спиране на услугата. Той също така уточнява, че Zookeeper трябва да се рестартира, ако излезе необичайно.

След като добавите това съдържание, запазете и затворете файла.

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

  1. sudo nano /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] указва, че този модулен файл зависи от zookeeper.service, което ще гарантира, че zookeeper се стартира автоматично, когато услугата kafka стартира.

Разделът [Service] указва, че systemd трябва да използва kafka-server-start.sh и kafka-server-stop.sh shell файлове за стартиране и спиране на услугата. Той също така уточнява, че Kafka трябва да се рестартира, ако излезе необичайно.

Запазете и затворете файла.

Сега, след като сте дефинирали единиците, стартирайте Kafka със следната команда:

  1. sudo systemctl start kafka

За да се уверите, че сървърът е стартиран успешно, проверете журналните регистрационни файлове за модула kafka:

  1. sudo systemctl status kafka

Ще получите резултат като този:

Output
● kafka.service Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset> Active: active (running) since Wed 2023-02-01 23:44:12 UTC; 4s ago Main PID: 17770 (sh) Tasks: 69 (limit: 4677) Memory: 321.9M CGroup: /system.slice/kafka.service ├─17770 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /ho> └─17793 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMill>

Вече имате Kafka сървър, който слуша на порт 9092, който е портът по подразбиране, използван от Kafka сървъра.

Вие стартирахте услугата kafka. Но ако рестартирате сървъра си, Kafka няма да се рестартира автоматично. За да активирате услугата kafka при зареждане на сървъра, изпълнете следната команда:

  1. sudo systemctl enable zookeeper

Ще получите отговор, че е създадена символна връзка:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.

След това изпълнете тази команда:

  1. sudo systemctl enable kafka

Ще получите отговор, че е създадена символна връзка:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.

В тази стъпка стартирахте и активирахте услугите kafka и zookeeper. В следващата стъпка ще проверите инсталацията на Kafka.

Стъпка 5 — Тестване на инсталацията на Kafka

В тази стъпка ще тествате инсталацията на Kafka. Ще публикувате и консумирате съобщение Hello World, за да се уверите, че Kafka сървърът се държи според очакванията.

Публикуването на съобщения в Kafka изисква:

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

За да започнете, създайте тема с име TutorialTopic:

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

Можете да създадете продуцент от командния ред, като използвате скрипта kafka-console-producer.sh. Той очаква името на хоста на Kafka сървъра, порт и тема като аргументи.

Ще получите отговор, че темата е създадена:

Output
Created topic TutorialTopic.

Сега публикувайте низа Hello, World в темата TutorialTopic:

  1. 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, който позволява потреблението на съобщения, публикувани преди потребителят да бъде стартиран:

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

Ако няма проблеми с конфигурацията, ще получите отговор Hello, World във вашия терминал:

Output
Hello, World

Скриптът ще продължи да се изпълнява в очакване на още съобщения за публикуване. За да тествате това, отворете нов терминален прозорец и влезте във вашия сървър. Не забравяйте да влезете като вашия потребител на kafka:

  1. su -l kafka

В този нов терминал стартирайте продуцент да публикува второ съобщение:

  1. echo "Hello World from Sammy at DigitalOcean!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Това съобщение ще се зареди в изхода на потребителя във вашия оригинален терминал:

Output
Hello, World Hello World from Sammy at DigitalOcean!

Когато приключите с тестването, натиснете CTRL+C, за да спрете потребителския скрипт във вашия оригинален терминал.

Вече сте инсталирали и конфигурирали Kafka сървър на Ubuntu 20.04. В следващата стъпка ще изпълните няколко бързи задачи, за да втвърдите сигурността на вашия Kafka сървър.

Стъпка 6 — Втвърдяване на Kafka сървъра

След завършване на вашата инсталация можете да премахнете администраторските привилегии на потребителя на kafka и да втвърдите Kafka сървъра.

Преди да го направите, излезте и влезте отново като всеки друг не-root потребител на sudo. Ако все още изпълнявате същата сесия на обвивката, с която сте започнали този урок, напишете exit.

Премахнете потребителя kafka от групата sudo:

  1. sudo deluser kafka sudo

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

  1. sudo passwd kafka -l

Флагът -l заключва командата за промяна на паролата на потребител (passwd).

В този момент само потребител на root или sudo може да влезе като kafka със следната команда:

  1. sudo su - kafka

В бъдеще, ако искате да отключите възможността за промяна на паролата, използвайте passwd с опцията -u:

  1. sudo passwd kafka -u

Вече успешно сте ограничили администраторските привилегии на потребителя kafka. Готови сте да започнете да използвате Kafka. По желание можете да следвате следващата стъпка, която ще добави KafkaT към вашата система.

Стъпка 7 — Инсталиране на KafkaT (по избор)

KafkaT е разработен, за да подобри способността ви да преглеждате подробности за вашия клъстер Kafka и да изпълнявате определени административни задачи от командния ред. Тъй като това е скъпоценен камък Ruby, ще ви трябва Ruby, за да го използвате. Ще ви трябва и пакетът build-essential, за да изградите другите скъпоценни камъни, от които зависи KafkaT.

Инсталирайте Ruby и пакета build-essential с помощта на apt:

  1. sudo apt install ruby ruby-dev build-essential

Вече можете да инсталирате KafkaT с командата gem:

  1. sudo CFLAGS=-Wno-error=format-overflow gem install kafkat

Флагът за компилация Wno-error=format-overflow е необходим за потискане на предупрежденията и грешките на Zookeeper по време на инсталационния процес на kafkat.

Когато инсталацията приключи, ще получите отговор, че е готова:

Output
... Done installing documentation for json, colored, retryable, highline, trollop, zookeeper, zk, kafkat after 3 seconds 8 gems installed

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

Създайте нов файл, наречен .kafkatcfg:

  1. nano ~/.kafkatcfg

Добавете следните редове, за да посочите необходимата информация за вашия Kafka сървър и екземпляр на Zookeeper:

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

Запазете и затворете файла. Вече сте готови да използвате KafkaT.

За да видите подробности за всички Kafka дялове, опитайте да изпълните тази команда:

  1. kafkat partitions

Ще получите следния резултат:

Output
[DEPRECATION] The trollop gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible. /var/lib/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated ... Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

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

За да научите повече за KafkaT, вижте неговото хранилище на GitHub.

Заключение

Вече имате Apache Kafka, работещ сигурно на вашия Ubuntu сървър. Можете да интегрирате Kafka в любимия си език за програмиране с помощта на клиенти на Kafka.

За да научите повече за Kafka, можете също да се консултирате с неговата документация.