Представь, что тебе нужно построить высоконагруженную систему обработки данных в реальном времени. Ты ищешь решение, которое масштабируется горизонтально, обеспечивает отказоустойчивость и гарантирует доставку сообщений. Apache Kafka — именно такой инструмент. Давай разберем, как выполнить установку Kafka на Ubuntu шаг за шагом, от подготовки системы до запуска первого кластера.
Предварительные требования
Перед началом установки Apache Kafka убедись, что у тебя есть:
- Ubuntu 20.04 LTS или новее (или другой Linux-дистрибутив)
- Минимум 4 ГБ оперативной памяти
- 20 ГБ свободного места на диске
- Права суперпользователя (sudo)
- Установленный Java 11 или 17 (Kafka требует JVM)
Шаг 1: Установка Java
Apache Kafka написан на Java, поэтому сначала установим OpenJDK:
# Обновляем пакеты
sudo apt update
sudo apt upgrade -y
# Устанавливаем OpenJDK 17 (рекомендуемая версия для Kafka 3.x)
sudo apt install -y openjdk-17-jdk
# Проверяем установку
java -version
# Должна быть версия 17 или выше
Шаг 2: Создание пользователя для Kafka
Для безопасности создадим отдельного пользователя для работы Kafka:
# Создаем пользователя kafka
sudo useradd -r -m -U -s /bin/bash kafka
# Добавляем пользователя в групу sudo (опционально, для удобства)
sudo usermod -aG sudo kafka
# Переключаемся на пользователя kafka
sudo su - kafka
Шаг 3: Загрузка и установка Apache Kafka
Скачиваем последнюю стабильную версию Kafka с официального сайта:
# Переходим в домашнюю директорию пользователя kafka
cd ~
# Скачиваем Kafka (проверь актуальную версию на kafka.apache.org)
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
# Распаковываем архив
tar -xzf kafka_2.13-3.6.0.tgz
# Переименовываем директорию для удобства
mv kafka_2.13-3.6.0 kafka
# Проверяем содержимое
ls -la kafka/
Шаг 4: Настройка Apache Kafka
Теперь настроим основные параметры брокера. Создадим свой конфигурационный файл:
# Копируем стандартный конфиг
cd ~/kafka
cp config/server.properties config/server-custom.properties
Отредактируем конфигурационный файл:
# Открываем файл для редактирования
nano config/server-custom.properties
Внеси следующие изменения (или создай файл с таким содержимым):
# Базовые настройки
broker.id=1
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://localhost:9092
# Директории для логов
log.dirs=/home/kafka/kafka-logs
# Настройки топиков
num.partitions=3
default.replication.factor=1
# Настройки логов
log.retention.hours=168
log.segment.bytes=1073741824
# Настройки Zookeeper (если используешь внешний)
zookeeper.connect=localhost:2181
# Безопасность и производительность
auto.create.topics.enable=false
delete.topic.enable=true
# Настройки для production (раскомментируй при необходимости)
# listeners=PLAINTEXT://0.0.0.0:9092
# advertised.listeners=PLAINTEXT://ВАШ_IP:9092
Шаг 5: Настройка Zookeeper
Начиная с версии Kafka 2.8+, можно использовать KRaft (Kafka Raft) вместо Zookeeper, но для совместимости рассмотрим классический вариант:
# Копируем конфиг Zookeeper
cp config/zookeeper.properties config/zookeeper-custom.properties
# Директория для данных Zookeeper
dataDir=/home/kafka/zookeeper-data
# Порт клиентских подключений
clientPort=2181
# Максимальное количество клиентских подключений
maxClientCnxns=60
# Настройки таймаутов
tickTime=2000
initLimit=10
syncLimit=5
Шаг 6: Запуск Zookeeper и Kafka
Запускаем сервисы в правильном порядке. Сначала Zookeeper, затем Kafka:
# Запускаем Zookeeper в фоновом режиме
cd ~/kafka
bin/zookeeper-server-start.sh -daemon config/zookeeper-custom.properties
# Ждем 10 секунд для инициализации
sleep 10
# Запускаем Kafka брокер
bin/kafka-server-start.sh -daemon config/server-custom.properties
# Проверяем, что процессы запущены
jps
# Должны увидеть: QuorumPeerMain и Kafka
Шаг 7: Тестирование установки Kafka
Создадим тестовый топик и проверим работу отправки/получения сообщений:
# Создаем топик test-topic
bin/kafka-topics.sh --create \
--topic test-topic \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 1
# Проверяем список топиков
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# Запускаем producer (в отдельном терминале)
bin/kafka-console-producer.sh \
--topic test-topic \
--bootstrap-server localhost:9092
# Запускаем consumer (в другом терминале)
bin/kafka-console-consumer.sh \
--topic test-topic \
--from-beginning \
--bootstrap-server localhost:9092
Шаг 8: Настройка systemd сервисов (опционально)
Для production-среды создадим systemd сервисы для автоматического запуска:
# Выходим из-под пользователя kafka
exit
# Создаем сервис для Zookeeper
sudo nano /etc/systemd/system/zookeeper.service
[Unit]
Description=Apache Zookeeper
After=network.target
[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper-custom.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
# Создаем сервис для Kafka
sudo nano /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka
After=network.target zookeeper.service
[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server-custom.properties
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
# Перезагружаем systemd и запускаем сервисы
sudo systemctl daemon-reload
sudo systemctl start zookeeper
sudo systemctl start kafka
# Включаем автозагрузку
sudo systemctl enable zookeeper
sudo systemctl enable kafka
# Проверяем статус
sudo systemctl status kafka
Сравнение методов установки Kafka
| Метод | Плюсы | Минусы | Для кого |
|---|---|---|---|
| Ручная установка (этот гайд) | Полный контроль, понимание системы, гибкость | Требует времени, ручная настройка | Разработчики, DevOps, обучение |
| Docker | Быстро, изолированно, легко воспроизводимо | Нет тонкой настройки, overhead | Разработка, тестирование |
| Kubernetes (Helm) | Автоматизация, масштабирование, production-ready | Сложность, требует инфраструктуры | Production, enterprise |
Частые проблемы и решения
Ошибка: Java not found
Решение: Установи OpenJDK 11 или 17: sudo apt install openjdk-17-jdk
Ошибка: Address already in use
Решение: Порт 9092 или 2181 занят. Измени порт в конфигурации или освободи его: sudo netstat -tlnp | grep :9092
Kafka не подключается к Zookeeper
Решение: Проверь, что Zookeeper запущен: jps | grep QuorumPeerMain и порт 2181 открыт.
Дальнейшие шаги после установки
- Настройка мониторинга: Установи JMX exporter для метрик
- Безопасность: Настрой SSL/TLS и SASL аутентификацию
- Резервное копирование: Настрой mirror-maker для репликации
- Оптимизация: Настрой retention policies и compaction
- Кластеризация: Добавь еще брокеров для отказоустойчивости
FAQ: Ответы на частые вопросы
Можно ли установить Kafka без Zookeeper?
Да, начиная с версии Kafka 2.8.0 можно использовать режим KRaft (Kafka Raft), который устраняет зависимость от Zookeeper. Это рекомендуемый подход для новых установок.
Какие порты нужно открыть для Kafka?
По умолчанию: 9092 (Kafka брокер), 2181 (Zookeeper). Для JMX мониторинга: 9999. В production также могут понадобиться порты для межброкерного общения (обычно 9093).
Как обновить версию Kafka?
Обновление выполняется последовательно: 1) Останови все брокеры 2) Обнови бинарные файлы 3) Проверь совместимость конфигов 4) Запусти брокеры по одному. Всегда тестируй обновление на staging-среде.
Какая конфигурация железа нужна для production?
Минимум: 8+ ядер CPU, 32+ ГБ RAM, SSD диски (лучше NVMe), раздельные диски для логов и ОС. Сеть: 10+ GbE. Все зависит от нагрузки.
Ключевые моменты успешной установки
- ✓ Всегда используй отдельного пользователя для Kafka
- ✓ Настрой правильные лимиты открытых файлов (ulimit -n 100000)
- ✓ Мониторь использование диска — Kafka чувствительна к свободному месту
- ✓ Документируй все изменения конфигурации
- ✓ Создавай бэкапы конфигов и данных Zookeeper
Теперь у тебя работает Apache Kafka на Ubuntu! Ты можешь начинать разработку приложений, которые будут использовать Kafka для обработки потоков данных. Помни: эта установка подходит для разработки и тестирования. Для production-среды потребуется дополнительная настройка безопасности, мониторинга и отказоустойчивости.
Следующие шаги: изучи Kafka Streams для обработки данных, Kafka Connect для интеграции с другими системами и настрой мониторинг через JMX.