Брокер сообщений — это программное обеспечение, которое служит промежуточным звеном для пересылки сообщений между различными приложениями. Он действует как определенный сервер, который получает сообщения от одного приложения (называемого продюсером) и маршрутизирует их к одному или нескольким другим приложениям (называемым консьюмером). Основная цель брокера сообщений — обеспечить устойчивую и надежную связь между различными системами, при этом не требуя, чтобы эти системы всегда были доступны и имели прямую связь друг с другом. Это позволяет приложениям работать асинхронно, обеспечивая отказоустойчивость и возможность работы в режиме реального времени. Брокер сообщений может принимать сообщения от множества источников и эффективно маршрутизировать их к нужному приемнику. Сообщения могут быть сгруппированы в топики или очереди в зависимости от требуемой бизнес-логики.
Существует множество различных брокеров сообщений, каждый из которых имеет свои собственные особенности и преимущества. В данной статье мы сфокусируемся на изучении Kafka.
Apache Kafka — это быстрый и масштабируемый брокер сообщений, способный обрабатывать миллионы сообщений в секунду. Брокер особенно ценится за свою отказоустойчивость и возможность длительного хранения данных. Проект изначально разрабатывался компанией LinkedIn, в настоящее время является самым популярным open-source решением в сфере брокеров сообщений и имеет лицензию Apache Software Foundation. Это решение широко используется для построения реальных пайплайнов данных и потоковых приложений. Перемещение и обработка потоков данных между системами или приложениями становится критической задачей. Именно здесь приходит на помощь Kafka, помогая пользователю обрабатывать потоки данных в реальном времени, с минимальной задержкой. В качестве распределенной системы, рассматриваемый брокер делится на множество серверов, которые могут хранить и обрабатывать потоки данных параллельно. Такое распределение позволяет Kafka обеспечивать обработку данных в реальном времени для множества различных источников, обеспечивая надежность и устойчивость к сбоям системы.
В этой статье мы будем изучать процесс установки и настройки Kafka, чтобы вы могли использовать все его преимущества для ваших проектов. Мы рассмотрим процесс для различных операционных систем, включая Windows, Ubuntu и MacOS, чтобы обеспечить максимально возможную гибкость для различных пользователей и потребностей.
cloud
Системные требования
Apache Kafka был разработан таким образом, чтобы максимально эффективно использовать возможности железа, на котором он работает. Однако, существуют некоторые общие рекомендации, которые полезно иметь в виду при настройке системы для работы с этим брокером:
-
Процессор (CPU): Kafka обычно не требует много процессорной мощности, так как большую часть операций он выполняет с помощью прямого доступа к диску (zero-copy). Однако количество ядер CPU может влиять на пропускную способность.
-
Оперативная память (RAM): Рекомендуется иметь как минимум 8GB оперативной памяти, но итоговый объем будет сильно зависеть от массива данных и количества параллельных операций.
-
Дисковое пространство: Kafka эффективно использует файловую систему и прямую запись на диск. Желательно использовать SSD с повышенной скоростью записи/чтения данных. Рекомендуется использовать отдельный диск, чтобы изолировать его работу от других процессов.
-
Сеть: Брокер активно использует сеть для передачи данных. Рекомендуется иметь стабильное подключение с высокой пропускной способностью.
-
Операционная система: Apache Kafka, как правило, работает на Unix-подобных системах, таких как Linux, однако это не ограничивает пользователя в выборе операционной системы.
-
Java: Поскольку инструмент написан на Java, вам потребуется среда выполнения Java (JDK), версии 8 или выше.
Несмотря на то, что Linux дает Kafka ключевое преимущество в виде производительности и масштабируемости, брокер хорошо работает как на Windows, так и на MacOS. Чуть позже мы разберем плюсы и минусы каждого решения, а сейчас приступим к установке.
Процесс установки Kafka достаточно прямолинейный, тем не менее он требует некоторой аккуратности. Вот пошаговая инструкция:
-
Скачивание и установка Java Development Kit (JDK): Apache Kafka работает на Java, поэтому первым делом нужно установить средства разработки, если они у вас были не установлены. Скачать JDK можно с официального сайта Oracle. После установки обязательно проверьте работоспособность, для этого достаточно ввести в командной строке (cmd) следующую команду:
java -version
-
Скачивание Apache Kafka: Apache Kafka можно скачать с официального сайта проекта (нам нужны Binary downloads). Рекомендуется выбирать последнюю стабильную версию продукта (на момент написания статьи это 3.7.0, поэтому здесь будет показана установки именно этой версии. Однако, установка от версии к версии не сильно меняется, поэтому эту инструкцию можно применять и к другим версиям продукта)
-
Распаковка: После скачивания архива его следует распаковать и переместить в удобное для вас место. После распаковки дистрибутива, вы увидите различные папки, такие как:
-
bin
: Эта папка содержит исполняемые файлы, которые используются для запуска и управления распределенной системой обмена сообщениями. В подпапке/windows
находятся специальные версии файлов, предназначенные для использования в OS Windows. -
config
: Здесь собраны файлы конфигурации Kafka, в том числеzookeeper.properties
иserver.properties
, которые можно отредактировать для более точной настройки. -
libs
: Это папка со всеми библиотеками, которые нужны для запуска и работоспособности. -
logs
: Здесь содержатся журналы работы или другими словами логи. Они могут быть полезны при отладке проблем и нахождении зависимостей между компонентами. -
site-docs
: Эта папка содержит документацию для версии Kafka, которую вы установили. Может быть полезна для начинающих специалистов. -
LICENSE
иNOTICE
: Эти файлы содержат лицензионное соглашение и правовые замечания.
-
Базовая настройка каталога данных и логирования: По умолчанию, файлы логов и каталог данных сохраняется в папке
/tmp
, что может привести к проблемам производительности, безопасности и управления данными. Рекомендуется поменять стандартные пути на свои -
Перейдите в
config/server.properties
и откройте файл в любом текстовом редакторе (на скриншоте VSCode). -
Найдите поле
log.dirs
(можно воспользоваться поиском, для этого нажмите сочетание клавиш Ctrl+F)
-
Поменяйте стандартный путь
/tmp/kafka-logs
на постоянный путь. Напримерc:/kafka/kafka-logs
. После чего сохраните файл и закройте его. -
Аналогичные действия нужно сделать и для каталога данных. Для этого перейдите в
config/zookeeper.properties
и откройте файл в любом текстовом редакторе. -
В параметре
dataDir
также нужно поменять стандартный путь на свой. Пример постоянного пути есть ниже на скриншоте.
На этом базовая настройка закончена. Этого хватит чтобы запустить сервер Zookeeper и Kafka и проверить работоспособность системы.
-
Запуск сервера Zookeeper и Kafka: Для запуска нужно перейти в папку с распакованным архивом и открыть командную строку. Для запуска Zookeeper используйте следующую команду:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties.
Обратите внимание, наш Zookeeper запущен на 2181
порту. Это стандартный порт для этой службы.
Если у вас появляется ошибка «The input line is too long. The syntax of the command is incorrect», переместите папку с Kafka в каталог, ближе к корню диска. Во время запуска zookeeper-server-start.bat
вызывает CLASSPATH
несколько раз, что приводит к переполнению переменной. Среда cmd.exe
поддерживает не более 8191 символов.
Откройте новое окно терминала для запуска Kafka-server и используйте следующую команду:
.\bin\windows\kafka-server-start.bat .\config\server.properties
-
Проверка работоспособности: Для проверки работоспособности попробуем создать тему с помощью следующей команды:
.\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 --topic TestTopic
Обратите внимание, что порт 2181 совпадает с открытым портом для Zookeeper.
Для наглядности создадим еще одну тему под названием NewTopic
. Теперь проверим, какие темы у нас существуют, следующей командой:
.\bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
В новой командной строке мы можем повзаимодействовать с темой, а именно создать несколько сообщений и прочитать их после. Для этого в новом окне введите следующую команду:
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic TestTopic
После старта команды можно передавать любые сообщения:
Для того чтобы начать получать сообщения, в новом окне консоли введите следующую команду:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic TestTopic --from-beginning
Как видно на скриншоте, мы получили сообщения по теме TestTopic
.
Это простой функционал, который помогает понять и разобраться в инструментах Kafka. Однако у вас может что-то пойти не так, походу установки и тестов. Вот некоторые типовые ошибки, которые могут возникнуть:
-
Проблемы с JDK: Убедитесь что у вас установлен JDK, а не JRE. Также обратите внимание на версию, она должна быть 8 или выше.
-
Проверка переменных окружения: После установки Java убедитесь, что переменная
JAVA_HOME
правильно установлена и что путь к каталогуbin
присутствует в системном пути. -
Проблемы с firewall и антивирусом: Иногда сторонние антивирусные программы или firewall могут блокировать Kafka. Если вы столкнулись с проблемами подключения, попробуйте на время отключить их.
-
Порты: По умолчанию Zookeeper слушает на порту 2181, а Kafka на 9092. Убедитесь, что эти порты свободны или переназначьте стандартные порты для этих служб.
-
Запуск Zookeeper перед Kafka: Перед тем как запускать Kafka, убедитесь, что Zookeeper уже работает. Если нет, то запустите Zookeeper.
-
Неправильное завершение Kafka: Если Kafka завершается неправильно, то возможно некоторые данные еще остались во временной папке. Если вы начинаете сталкиваться с трудностями при запуске, попробуйте очистить временные файлы.
Установка и настройка Kafka на Ubuntu
На самом деле, шаги не будут сильно отличаться, в зависимости от дистрибутива Linux, который вы выбрали (в нашем случае это Ubuntu). Отличия будут касаться установочных менеджеров и незначительных особенностей каждой операционной системы. Шаги будут похожи на установку для Windows, поэтому вы можете обращаться к этому разделу тоже, даже если у вас операционная система Linux.
vds
-
Скачивание и установка Java Development Kit (JDK): Как уже упоминалось, Apache Kafka работает на Java, поэтому первым делом нужно установить JDK. Однако перед этим, рекомендуем обновить список пакетов и версии этих пакетов командой:
sudo apt update
sudo apt upgrade
В Linux-системах установку можно сделать довольно просто через терминал, для этого достаточно ввести следующие команды:
sudo apt install default-jre
sudo apt install default-jdk
-
Скачивание и разархивирование: Apache Kafka можно скачать с официального сайта проекта. Рекомендуется выбирать последнюю стабильную версию продукта. Для скачивания можно воспользоваться утилитой
wget
из консоли:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
Для распаковки воспользуйтесь следующей командой:
tar xzf kafka_2.13-3.7.0.tgz
Обратите внимание, что на момент прочтения статьи, версия продукта может быть другой, соответственно команды, а конкретно цифры в ссылке, будут выглядеть по-другому. По итогу вышеописанных действий у вас должна появиться папка с продуктом рядом с архивом. Перейдите в появившуюся папку командой:
cd kafka_2.13-3.7.0
-
Проверка работоспособности: Остальные пункты похожи на то, что мы делали для Windows, поэтому рекомендуем прочитать инструкцию начиная с 3 пункта. Для запуска Zookeeper нужно написать следующую команду:
bin/zookeeper-server-start.sh config/zookeeper.properties
Затем в новом окне терминала запустите Kafka:
bin/kafka-server-start.sh config/server.properties
Это основная установка и настройка. Для продакшн-среды есть возможность настройки различных параметров, таких как многочисленные бэкапы, конфигурация сети, разделение данных и так далее, но это более трудоемкий и сложный процесс.
Также стоит упомянуть про некоторые возможные трудности, с которыми можно столкнуться в процессе установки Kafka на Linux:
-
Разрешение прав доступа: При работе с Linux иногда возникают проблемы с правами доступа к определенным файлам или каталогам. Чтобы обойти это, можно использовать sudo перед командами, которые будут вызывать проблемы. Однако будьте осторожны с этим, потому что sudo дает полный админский доступ, что может повлечь за собой последствия с нарушением безопасности.
-
Ошибки памяти Java: Если у вас возникают проблемы с памятью Java при работе с Kafka, вы можете попробовать увеличить максимальное количество памяти, выделенной для JVM с помощью флага -Xmx. Для этого нужно будет добавить флаг в файл конфигурации, который находится в
bin/kafka-server-start.sh
. Однако учтите, что важно оставить достаточно памяти для работы других процессов в системе. Увеличение максимального объема памяти JVM может привести к замедлению работы системы, если JVM начнет использовать все доступные ресурсы. -
Управление версиями: При работе с Linux иногда возникают проблемы с версиями. Всегда проверяйте версию Kafka и все связанные инструменты, такие как Zookeeper, для обеспечения совместимости.
-
Правильная остановка Kafka и Zookeeper: Для остановки Kafka и Zookeeper в Linux вы можете использовать команды
kafka-server-stop.sh
zookeeper-server-stop.sh
Рекомендуется всегда останавливать эти службы правильно, чтобы избежать потери данных.
-
Проблемы с логированием: Инструмент генерирует огромное количество логов, удостоверьтесь, что у вас есть достаточно свободного места на диске и активирована ротация логов.
-
Порты и пределы файлов: Убедитесь, что у вас есть разрешение на открытие необходимого количества файлов или сокетов. Linux имеет системные ограничения, которые можно изменить при необходимости.
Установка и настройка Kafka на MacOS
Вот пошаговый процесс установки и настройки Kafka на системе MacOS:
-
Установка Homebrew: Homebrew — менеджер пакетов, который упрощает установку программного обеспечения на операционной системе MacOS. Homebrew не требует прав администратора для установки ПО, что делает его удобным для использования и уменьшает риски связанные с безопасностью. Если у вас еще нет Homebrew, вы можете установить его, используя следующую команду в терминале:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
В нашем случае, Homebrew понадобится для установки Kafka и его зависимостей.
-
Обновление Homebrew: В случае если у вас уже был установлен Homebrew, его не помешало бы обновить до новейшей версии командой.
brew update
-
Установка Java Development Kit (JDK): Для установки JDK можно воспользоваться Homebrew, который мы только что установили. Для этого в консоли введите следующую команду:
brew install openjdk
-
Установка Kafka: Установите Kafka следующей командой:
brew install kafka
-
Запуск Kafka и Zookeeper: Сначала запустите Zookeeper, а затем Kafka. Замените
usr/local/bin
на путь к исполняемым файлам Kafka и Zookeeper, если они у вас в другом месте:
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
kafka-server-start /usr/local/etc/kafka/server.properties
Также стоит отметить, что для простоты демонстрации мы запустили Zookeeper и Kafka в режиме standalone на локальной машине. Для создания полноценной распределенной сети на нескольких машинах, вам потребуется изменить файлы конфигурации соответствующим образом. Среди ключевых параметров для изменения:
-
Разделы — сущности, которые позволяют распараллелить обработку данных. Количество разделов определяет, сколько потоков одновременно сможет обрабатывать данные в рамках топика.
-
Реплики — копии существующих разделов, для обеспечения отказоустойчивости. Количество реплик определяет, сколько копий каждого раздела будет храниться в кластере.
-
Информация о брокере — полный список всех серверов, которые будут участвовать в кластере.
Как и для других операционных систем, мы отметим типичные проблемы при установке Kafka на MacOS:
-
JDK нужной версии: Проверьте, установлен ли JDK версии 8 или выше. Если JDK не установлен, то вы можете столкнуться с ошибкой при попытке запуска.
-
Переменные среды: Kafka может не работать, если переменные среды установлены неправильно или не установлены вовсе. Например, вы должны установить переменную среды
KAFKA_HOME
на путь к директории. Иногда для корректной работы могут потребоваться и другие переменные среды, напримерJAVA_HOME
. -
Путь к файлам и разрешения: Kafka может не найти нужные файлы или не сможет запуститься, если у него нет разрешения на чтение и запись в определенные директории. Вам может потребоваться изменить разрешения или переместить некоторые файлы.
-
Проблемы с Homebrew: Убедитесь, что Homebrew установлен корректно и обновлен до последней версии. Иногда установка через Homebrew может привести к конфликту версия или проблемам с зависимостями.
-
Проблемы с зависимостями: Система требует наличия Zookeeper чтобы функционировать. Первым делом запускайте Zookeeper, а потом уже Kafka.
-
Порты: Kafka и Zookeeper используют определенные порты (9092 и 2181 соответственно) по умолчанию. Если эти порты используются другими приложениями, инструмент не сможет запуститься.
-
Конфигурация: Ошибки в файлах конфигурации Kafka или неправильно заданные параметры могут привести к проблемам при попытке запуска.
Зачастую установка Kafka идет довольно гладко, если использовать Homebrew. Вероятность столкнуться с проблемой в MacOS мала.
Установка и настройка Kafka в Docker
Docker — это платформа, предназначенная для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение со всем его окружением и зависимостями в один пакет, который можно легко распространять и устанавливать на любой системе. Установка Kafka в Docker — это хороший способ быстро и без особых трудностей начать работать с системой. Вот несколько простых шагов, для установки:
-
Первым делом, нужен сам Docker. Скачайте Kafka с официального сайта проекта способом, соответствующим вашей ОС.
-
Запустите экземпляр, с помощью этой команды:
docker run -p 9092:9092 apache/kafka:3.7.0
Обратите внимание, что ваша версия Kafka может отличаться от той, что в примере.
Вы можете проверить работоспособность инструмента аналогично разделу установки на Linux.
Общие рекомендации по выбору ОС
Как мы выяснили, возможность установить Kafka есть во всех основных операционных системах, а также в Docker. В зависимости от конкретной ситуации и потребностей, каждая из них имеет свои преимущества и недостатки. Если у вас стоит выбор, на какой ОС развернуть Kafka, ниже будут рассмотрены плюсы и минусы каждой системы.
Windows
-
Плюсы:
-
Простота использования: Windows по-прежнему остается одной из самых популярных операционных систем с большим количеством документации и комьюнити.
-
Интеграция: Очень хорошо интегрируется с другими продуктами и сервисами Microsoft.
-
Минусы:
-
Windows не всегда является наилучшим выбором для развертывания серверных приложений, скорее всего вам придется столкнуться с некоторыми проблемами совместимости и производительности.
-
Наличие Powershell и WSL (Windows Subsystem for Linux) может упростить работу, однако эти системы не всегда могут быть оптимальными для работы с Linux-приложениями.
-
Kafka и Zookeeper обычно тестируются и используются на Unix-подобных системах, что может привести к большему количеству багов и проблем.
macOS
-
Плюсы:
-
Простая установка с минимальными трудностями.
-
Удобные инструменты для установки и управления продуктами.
-
Система на базе Unix, что облегчает работу с большинством инструментов.
-
Минусы:
-
Ресурсоемкая система: Если ваш Mac не обладает достаточными ресурсами, это может замедлить работу.
-
Возможные проблемы совместимости между версиями macOS и Kafka, что может привести к фатальным ошибкам.
Linux
-
Плюсы:
-
Из-за того, что Linux — это система с открытым исходным кодом и поддерживается большим сообществом, почти всегда есть способы решения той или иной проблемы.
-
Linux занимает меньше системных ресурсов, что делает его более эффективным в работе с Kafka.
-
Операционные системы на базе Linux часто являются предпочтительными для серверных приложений.
-
Минусы:
-
Требует больше технических навыков для настройки и управления, по сравнению с Windows и macOS.
-
Возможные сложности при установке и настройке GUI.
Docker
-
Плюсы:
-
Портативность: Docker-контейнеры можно запускать на любой операционной системе. Это может облегчить развертывание брокера в различных окружениях.
-
Изоляция: Docker обеспечивает изоляцию между приложениями, что означает, что работа Kafka не будет влиять на другие приложения.
-
Воспроизводимость: Используя Docker, можно создать конфигурацию, которую легко воспроизвести. Это облегчает процесс обновления и развертывания.
-
Интеграция с другими инструментами: Docker хорошо взаимодействует с популярными решениями, что упрощает управление и масштабирование контейнеров Kafka.
-
-
Минусы:
-
Сложность: Docker добавляет дополнительный слой сложности в установку брокера.
-
Управление данными: Брокер хранит все сообщения на диске. Его конфигурация и управление могут быть сложными, учитывая контейеризованную среду.
-
Производительность: Как и любая другая система, работающая в контейнере, производительность брокера может быть ограничена ресурсами контейнера. Это может потребовать более тонкой настройки Docker.
-
Управление: Управление и мониторинг брокера в контейнере может быть сложным, особенно в больших системах. Возможно потребуются инструменты автоматизации, такие как Kubernetes и Prometheus.
-
В целом, Linux является наиболее распространенным выбором для работы с Apache Kafka, особенно для серверов и рабочих станций. Однако, выбор операционной системы будет напрямую зависеть от ваших предпочтений и требований.
Запуск Kafka в облаке
Мы рассмотрели процесс установки Kafka на разные операционные системы, однако этот процесс может затянуться в связи с некоторыми ошибками. Если вы хотите избежать заморочек с установкой и настройкой, обратите внимание на наше решение.
Timeweb Cloud предлагает гибкое и масштабируемое облачное решение для запуска экземпляра Kafka за пару минут. Вам не нужно устанавливать и настраивать ПО, достаточно выбрать регион и конфигурацию.
Решение Timeweb Cloud обеспечит стабильность и быстродействие вашему проекту на Kafka, благодаря профессиональной поддержке и высокопроизводительной инфраструктуре. Все это позволяет полностью сосредоточиться на разработке и масштабировании вашего проекта, не беспокоясь о технической стороне процесса.
Попробуйте Timeweb Cloud уже сегодня и откройте для себя преимущества работы с надежным и высокопроизводительным облачных хостингом.
Заключение
Apache Kafka — это серьезный, надежный и масштабируемый брокер сообщений, который обеспечивает высокую пропускную способность, устойчивость к отказам и низкую временную задержку. Вот несколько причин, почему стоит выбирать Kafka в качестве среды обмена сообщениями:
-
Высокая пропускная способность: Apache Kafka способен обрабатывать миллионы сообщений в секунду, что делает его отличным выбором для приложений, которые обрабатывают огромные объемы данных в реальном времени.
-
Устойчивость к отказам: Kafka обеспечивает восстановление от сбоев и обеспечивает высокую доступность данных благодаря своим механизмам репликации.
-
Масштабируемость: Kafka легко масштабируется, добавляя больше узлов в кластер без прерывания сервиса.
-
Долгосрочное хранение данных: В отличие от большинства других брокеров сообщений, Kafka поддерживает долгосрочное хранение данных. Можно настроить период удержания данных в Kafka, и они будут сохраняться до истечении этого времени.
-
Распределенная система: Kafka по сути является распределенной системой, это означает, что сообщения могут быть потребляемы в любом порядке и по многим каналам.
-
Интеграция с большим количеством систем: Kafka может быть легко интегрирована с различными системами, такими как Hadoop, Spark, Storm, Flink и многими другими.
-
Быстрая обработка: Apache Kafka обеспечивает низкую задержку, что делает его отличным выбором для приложений, которым требуется быстрая обработка данных в реальном времени.
-
Топология «публикация-подписка»: Kafka позволяет источникам данных отправлять сообщения в топики, а приложениям-получателя — подписывать на интересующие их топики.
Все эти преимущества делают Kafka одним из наиболее популярных и надежных брокеров сообщений на рынке. Однако, как всегда, выбор инструмента должен основываться на требованиях проекта и предпочтениям команды.
В прошлый раз мы говорили про конфигурацию Kafka-потребителя. Сегодня поговорим про особенности работы с консольным потребителем в распределенном брокере Kafka. Читайте далее про особенности работы с консольным потребителем, благодаря которому Kafka может обеспечивать работу независимо от программной платформы.
Kafka-потребитель (consumer) — это сервис (или группа брокеров), который отвечает за получение Big Data сообщений, созданных продюсером. Получение сообщений, также, как и создание идет в распределенной среде в реальном времени. Консольный потребитель — это сервис, предусматривающий запуск Kafka-потребителя в кроссплатформенной среде. Для работы с консольным потребителем в Kafka существует специальная утилита kafka-comsole-consumer.sh
(в Windows kafka-comsole-consumer.bat
). Эта утилита также представляет собой адаптер для клиентских Java-библиотек, так что писать для этой цели отдельное приложение нет необходимости [1].
Особенности работы консольного потребителя в Kafka: несколько практических примеров
Как уже отмечалось выше, для того, чтобы начать работу с консольным потребителем в Kafka, необходимо использовать утилиту kafka-comsole-consumer.sh
(kafka-comsole-consumer.bat
для систем Windows). Следующий код, исполняемый в командной строке отвечает за запуск консольного потребителя в кластере Kafka [1]:
kafka-console-consumer.sh --zookeeper zoo1.example.com:2181/kafka-cluster --topic my-topic
Параметр --zookeeper
, который используется с последующей строкой подключения, используется для подключения к необходимому кластеру. Параметр --topic
используется для подключения к указанному топику, из которого необходимо получать сообщения. Вместо --topic
можно также использовать 2 других параметра, использующие регулярныке выражения (используются для задания образца поиска определенной группы элементов):
--whitelist
— параметр, указывающий на то, что будут потребляться все топики, соответствующие заданному регулярному выражению;--blacklist
— параметр, указывающий на то, что должны потребляться все топики, кроме тех, что соответствуют указанному регулярному выражению.
Следующий код, исполняемый в командной строке, отвечает за подключение к нескольким топикам одновременно [1]:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist 'hello-topic|world-topic|another-topic'
Например, для того, чтобы игнорировать вышеперечисленный список тем, необходимо указать его с параметром --blacklist
[1]:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --blacklist 'hello-topic|world-topic|another-topic'
Таким образом, благодаря возможности работы с консольным консьюмером, брокер Kafka может настраивать механизм получения сообщений с высокой степенью безопасности и с минимальными рисками независимо от поддерживаемого языка программирования. Это делает Apache Kafka универсальным и надежным средством для хранения и обмена большими потоками данных, что позволяет активно использовать этот брокер сообщений в задачах Data Science и разработке распределенных приложений.
Администрирование кластера Kafka
Код курса
KAFKA
Ближайшая дата курса
2 июля, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Освоить Apache Kafka на профессиональном уровне в качестве администратора Big Data кластеров, разработчика распределенных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Kafka в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Администрирование кластера Kafka
- Apache Kafka для разработчиков
- Администрирование кластера Arenadata Streaming Kafka
Записаться на курс
Смотреть раcписание
Источники
- Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных
Note: When you purchase through links on our site, we may receive an affiliate commission.
Introduction
In my last article, we covered setting up and using Hadoop. This article is all about configuring and starting an Apache Kafka server on a Windows OS. This guide will also provide instructions to set up Java and Apache ZooKeeper.
Apache Kafka is a fast and scalable messaging queue, capable of handling heavy loads in context of read and write, i.e. IO-related, stuff. You can find more about Kafka on http://kafka.apache.org/. Apache Kafka requires a running ZooKeeper instance, which is used for reliable distributed coordination. Please find more about ZooKeeper on https://zookeeper.apache.org/..
You might also consider these Apache Kafka resources:
- Getting Started with Apache Kafka 5/5 stars from 785 reviews. 10 day free trial on Pluralsight
- Apache Kafka for Beginners — Learn Kafka by Hands-On 4.3/5.0 stars from 751 reviews on Udemy.
- Apache Kafka Patterns and Anti-Patterns: DZone Refcard
You can get help from this video for setting up Kafka on Windows.
Author’s GitHub:
I have created a bunch of Spark-Scala utilities at https://github.com/gopal-tiwari, might be helpful in some other cases.
Downloading the Required Files
- Download Server JRE according to your OS and CPU architecture from http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
- Download and install 7-zip from http://www.7-zip.org/download.html
- Download and extract ZooKeeper using 7-zip from http://zookeeper.apache.org/releases.html
- Download and extract Kafka using 7-zip from http://kafka.apache.org/downloads.html
For this tutorial, we are assuming that ZooKeeper and Kafka are unzipped in the C: drive, but you can unzip them in any location. DZone’s previously covered the differences between JDK, JRE, and JVM.
Here, we are using full-fledged ZooKeeper and not the one packaged with Kafka because it will be a single-node ZooKeeper instance. If you want, you can run Kafka with a packaged ZooKeeper located in a Kafka package inside the \kafka\bin\windows directory.
Installation
A. JDK Setup
1. Start the JRE installation and hit the “Change destination folder” checkbox, then click ‘Install.’
2. Change the installation directory to any path without spaces in the folder name. E.g. C:\Java\jre1.8.0_xx\. (By default it will be C:\Program Files\Java\jre1.8.0_xx), then click ‘Next.’
3. Now open the system environment variables dialogue by opening Control Panel -> System -> Advanced system settings -> Environment Variables.
4. Hit the New User Variable button in the User variables section, then type JAVA_HOME in Variable name and give your jre path in the Variable value. It should look like the below image:
(Java path and version may change according to the version of Kafka you are using)
5. Now click OK.
6. Search for a Path variable in the “System Variable” section in the “Environment Variables” dialogue box you just opened.
7. Edit the path and type “;%JAVA_HOME%\bin” at the end of the text already written there, just like the image below:
8. To confirm the Java installation, just open cmd and type “java –version.” You should be able to see the version of Java you just installed.
If your command prompt somewhat looks like the image above, you are good to go. Otherwise, you need to recheck whether your setup version matches the correct OS architecture (x86, x64), or if the environment variables path is correct.
Related Tutorial: Kafka Security With SASL and ACL
B. ZooKeeper Installation
1. Go to your ZooKeeper config directory. For me its C:\zookeeper-3.4.7\conf
2. Rename file “zoo_sample.cfg” to “zoo.cfg”
3. Open zoo.cfg in any text editor, like Notepad; I prefer Notepad++.
4. Find and edit dataDir=/tmp/zookeeper to :\zookeeper-3.4.7\data
5. Add an entry in the System Environment Variables as we did for Java.
a. Add ZOOKEEPER_HOME = C:\zookeeper-3.4.7
to the System Variables.
b. Edit the System Variable named “Path” and add ;%ZOOKEEPER_HOME%\bin;
6. You can change the default Zookeeper port in zoo.cfg file (Default port 2181).
7. Run ZooKeeper by opening a new cmd and type zkserver
.
8. You will see the command prompt with some details, like the image below:
Congratulations, your ZooKeeper is up and running on port 2181!
C. Setting Up Kafka
1. Go to your Kafka config directory. For me its C:\kafka_2.11-0.9.0.0\config
2. Edit the file “server.properties.”
3. Find and edit the line log.dirs=/tmp/kafka-logs” to “log.dir= C:\kafka_2.11-0.9.0.0\kafka-logs
.
4. If your ZooKeeper is running on some other machine or cluster you can edit “zookeeper.connect:2181” to your custom IP and port. For this demo, we are using the same machine so there’s no need to change. Also the Kafka port and broker.id are configurable in this file. Leave other settings as is. Learn how to setup a Zookeeper cluster.
5. Your Kafka will run on default port 9092 and connect to ZooKeeper’s default port, 2181.
D. Running a Kafka Server
Important: Please ensure that your ZooKeeper instance is up and running before starting a Kafka server.
1. Go to your Kafka installation directory: C:\kafka_2.11-0.9.0.0\
2. Open a command prompt here by pressing Shift + right click and choose the “Open command window here” option).
3. Now type .\bin\windows\kafka-server-start.bat .\config\server.properties
and press Enter.
.\bin\windows\kafka-server-start.bat .\config\server.properties
4. If everything went fine, your command prompt will look like this:
5. Now your Kafka Server is up and running, you can create topics to store messages. Also, we can produce or consume data from Java or Scala code or directly from the command prompt.
E. Creating Topics
1. Now create a topic with the name “test” and a replication factor of 1, as we have only one Kafka server running. If you have a cluster with more than one Kafka server running, you can increase the replication-factor accordingly, which will increase the data availability and act like a fault-tolerant system.
2. Open a new command prompt in the location C:\kafka_2.11-0.9.0.0\bin\windows.
3. Type the following command and hit Enter:
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
F. Creating a Producer and Consumer to Test Server
1. Open a new command prompt in the location C:\kafka_2.11-0.9.0.0\bin\windows
2. To start a producer type the following command:
kafka-console-producer.bat --broker-list localhost:9092 --topic test
3. Again open a new command prompt in the same location as C:\kafka_2.11-0.9.0.0\bin\windows
4. Now start a consumer by typing the following command:
Before kafka version 2.0 (<2.0):
kafka-console-consumer.bat --zookeeper localhost:2181 --topic test
After kafka version 2.0 (>= 2.0):
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test
5. Now you will have two command prompts, like the image below:
6. Now type anything in the producer command prompt and press Enter, and you should be able to see the message in the other consumer command prompt.
7. If you are able to push and see your messages on the consumer side, you are done with Kafka setup.
Some Other Useful Commands
- List Topics:
kafka-topics.bat --list --zookeeper localhost:2181
- Describe Topic:
kafka-topics.bat --describe --zookeeper localhost:2181 --topic [Topic Name]
- Read messages from the beginning
- Before version < 2.0:
kafka-console-consumer.bat --zookeeper localhost:2181 --topic [Topic Name] --from-beginning
- After version > 2.0:
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic [Topic Name] --from-beginn
- Before version < 2.0:
- Delete Topic:
kafka-run-class.bat kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
Opinions expressed by DZone contributors are their own.
How To Set Up Apache Kafka on Window 10
By Chunren Lai, Dec. 12, 2020
This article lists steps to install and run Apache Kafka on Windows 10.
Table of Contents
Step 1. Introduction
Step 2. Download Files
Step 3. Install the 7zip and Notepad++
Step 4. Install the Java Runtime
Step 5. Install ZooKeeper
Step 6. Install and Set up Kafka
Step 7. Test Apache Kafka
Step 1. Introduction
To run Apache Kafka on a windows OS, you will need to download , install, and set up Java, ZooKeeper, and Apache Kakfa. After set up the Apache Kafka, we will run some commands to produce and consume some messages on a test topics on Kafka to ensure Apache Kafka is running properly.
Step 2. Download Files
-
Upzip and Text Editor tools
- If you don’t have 7-zip installed on your windows, you are recommended to download the 7-zip from (https://www.7-zip.org/download.html). If your system is 64-bit x64, you can download the exe installer from (https://www.7-zip.org/a/7z1900-x64.exe)
- You are also recommended to download the text editor Notepad++ from (https://notepad-plus-plus.org/downloads/)
-
JRE download
- You can download the Java runtime from Oracle site ( http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) based on your CPU architecture.
-
ZooKeeper download
- You can download the ZooKeepr from Apache site ( http://zookeeper.apache.org/releases.html)
-
Kafka download
- You can download the Apache Kafka from Apache site ( http://kafka.apache.org/downloads.html)
The following is a list of my downloads.
Step 3. Install the 7zip and Notepad plus plus
You can directly run the executable installer (e.g., «7z1900-x64.exe» and «npp.7.8.8.Installer.x64.exe»)
Step 4. Install the Java Runtime
You can run the JRE installer (e.g., «jre-8u271-windows-x64.exe»), and install the Java in its default installation folder (e.g., «C:\Program Files\Java\jre1.8.0_271»).
After the installation, you need to set up:
- Environment variable for JAVA_HOME
Open the «Control Panel» -> «System» -> «Advanced system settings» -> «Environment Variables» -> «System variables» («New»):
Item | Value |
---|---|
Variable name | JAVA_HOME |
Variable value | Java installation folder (e.g., «C:\Program Files\Java\jre1.8.0_271») |
- Add Java path to the «Path» variable
Select «Path» of the «System variable» section, and the click «Edit…» button to add the java path. In the «Edit environment variable» pop up window, click the «New» button, and add:
Step 5. Install ZooKeeper
dataDir=C:/zookeeper-3.6.2/data
- Similar to the above Java installation,
- to add a variable of «ZOOKEEPER_HOME» to the System Variables:
Item | Value |
---|---|
Variable name | ZOOKEEPER_HOME |
Variable value | C:\zookeeper-3.6.2 |
- to add «%ZOOKEEPER_HOME%\bin» new entry to the System Variable «Path»
- Start the ZooKeeper, by
- type «cmd» in the Search area (bottom left side)
- in the commond line, type
cd c:\zookeeper-3.6.2\bin
- type «zkserver», and you will see:
Step 6. Install and Set up Kafka
log.dirs=c:/kafka/kafka-logs
- If you plan to run Kafka on your loacal machine with other default settings, you are ready to go, otherwise you can change the following default setting:
zookeeper.connect=localhost:2181 with a proper IP address and a custom port number. - Open a new command prompt, and:
- type:
cd c:\kafka, and press enter
- then press «Enter», and type:
.\bin\windows\kafka-server-start.bat .\config\server.properties
, and press enter, you will see:
3) Now you finish installing and setting up Apache Kafka, and the Kafka server is up running.
Step 7. Test Apache Kafka
-
Create a topic called «StudentImport»
- Open a new command prompt, and type: cd c:\kafka\bin\windows, press enter
- type:
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic StudentImport
- Now the «StudentImport» has been successfully created. See below:
-
Create a Producer to the Kafka server
- Open a new command prompt (called producer command window «P»), and type: cd c:\kafka\bin\windows, press enter
- type:
kafka-console-producer.bat --broker-list localhost:9092 --topic StudentImport
- Now it is ready for you to enter any message in the Producer console. See below:
-
Create a Consumer to the Kafka server
- Open a new command prompt (called consumer command window «C»), and type: cd c:\kafka\bin\windows, press enter
- type:
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic StudentImport
- Now it is listening any messages in the Producer console.
-
Testing message communications
- In the producer command window «P» (see above), when you type: «Hello, it is Chunren», and press enter, then in the consumer command window «C» (see above), you will see the message «Hello, It is Chunren» being displayed.
- In the producer command window «P», when you type: «We are going to import student rosters soon.», and press enter, then in the consumer command window «C», uou will see the message «We are going to import student rosters soon.» being displayed.
- See below the results:
In the producer command window «P»:In the consumer command window «C»:
Congratulations! You have successfully set up Apache Kafka on your Windows 10.
Skip to content
Install Apache Kafka on Windows 10
This guide helps you to understand how to install Apache Kafka on Windows 10 operating system and executing some of the basic commands on Kafka console.
Apache Kafka:
Apache Kafka is a distributed, fast and scalable messaging queue platform, which is capable of publishing and subscribing to streams of records, similar to a message queue or enterprise messaging system.
Prerequisites:
Install JRE before you further.
Install Apache Kafka on Windows:
Download the latest Apache Kafka from the official Apache website for me it is 2.11.2.0.0 release.
Click on above highlighted binary downloads and it will be redirected to Apache Foundations main downloads page like below.
Select the above-mentioned apache mirror to download Kafka, it will be downloaded as a .tgz. Extract it and you will see the below folder structure.
/bin directory represents all the binary files which are helpful to start Kafka server different operating systems. As we are working with the windows machine, there will be a folder named windows under /bin directory, which has all the windows related stuff.
/config directory contains all configuration details about Kafka server, zookeeper, and logs. All configurations have their default values if you wanted to change any config details like port you can freely go and change accordingly.
# The directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
server.properties
############################# Zookeeper #############################
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=6000
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
log.dirs=/tmp/kafka-logs
/libs directory contain all dependency executables like java, jetty, log4j and etc.
If you are okay with the above default configurations, you are ready to start zookeeper and Kafka server.
Start the Zookeeper:
Go to Kafka_X.XX-X.X.X\bin\windows\
D:\Softwares\kafka_2.11-2.0.0\bin\windows>zookeeper-server-start.bat ../../config/zookeeper.properties
[2018-11-17 03:20:58,713] INFO Reading configuration from: ..\..\config\zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2018-11-17 03:20:58,713] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
[2018-11-17 03:20:58,713] INFO autopurge.purgeInterval set to 0 (org.apache.zookeeper.server.DatadirCleanupManager)
[2018-11-17 03:20:58,713] INFO Purge task is not scheduled. (org.apache.zookeeper.server.DatadirCleanupManager)
[2018-11-17 03:20:58,713] WARN Either no config or no quorum defined in config, running in standalone mode (org.apache.zookeeper.server.quorum.QuorumPeerMain)
[2018-11-17 03:20:58,744] INFO Reading configuration from: ..\..\config\zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2018-11-17 03:20:58,744] INFO Starting server (org.apache.zookeeper.server.ZooKeeperServerMain)
[2018-11-17 03:21:03,261] INFO Server environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 00:39 GMT (org.apache.zookeeper.server.ZooKeeperServer)
.............
.............
[2018-11-17 03:21:03,345] INFO Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory (org.apache.zookeeper.server.ServerCnxnFactory)
[2018-11-17 03:21:03,345] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)
[2018-11-17 03:21:35,434] INFO Accepted socket connection from /127.0.0.1:63924 (org.apache.zookeeper.server.NIOServerCnxnFactory)
[2018-11-17 03:21:35,450] INFO Client attempting to establish new session at /127.0.0.1:63924 (org.apache.zookeeper.server.ZooKeeperServer)
[2018-11-17 03:21:35,450] INFO Creating new log file: log.5 (org.apache.zookeeper.server.persistence.FileTxnLog)
[2018-11-17 03:21:35,535] INFO Established session 0x1000238240f0000 with negotiated timeout 6000 for client /127.0.0.1:63924 (org.apache.zookeeper.server.ZooKeeperServer)
Start Apache Kafka:
D:\Softwares\kafka_2.11-2.0.0\bin\windows>kafka-server-start.bat ../../config/server.properties
[2018-11-17 03:21:30,291] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[2018-11-17 03:21:30,777] INFO starting (kafka.server.KafkaServer)
[2018-11-17 03:21:30,777] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
[2018-11-17 03:21:30,831] INFO [ZooKeeperClient] Initializing a new session to localhost:2181. (kafka.zookeeper.ZooKeeperClient)
[2018-11-17 03:21:35,350] INFO Client environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 00:39 GMT (org.apache.zookeeper.ZooKeeper)
[2018-11-17 03:21:35,350] INFO Client environment:host.name=DESKTOP-RN4SMHT (org.apache.zookeeper.ZooKeeper)
[2018-11-17 03:21:35,350] INFO Client environment:java.version=9.0.4 (org.apache.zookeeper.ZooKeeper)
[2018-11-17 03:21:35,350] INFO Client environment:java.vendor=Oracle Corporation (org.apache.zookeeper.ZooKeeper)
[2018-11-17 03:21:35,350] INFO Client environment:java.home=C:\Program Files\Java\jdk-9.0.4 (org.apache.zookeeper.ZooKeeper)
................
................
[2018-11-17 03:21:43,100] INFO [ProducerId Manager 0]: Acquired new producerId block (brokerId:0,blockStartProducerId:0,blockEndProducerId:999) by writing to Zk with path version 1 (kafka.coordinator.transaction.ProducerIdManager)
[2018-11-17 03:21:43,138] INFO [TransactionCoordinator id=0] Starting up. (kafka.coordinator.transaction.TransactionCoordinator)
[2018-11-17 03:21:43,154] INFO [TransactionCoordinator id=0] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator)
[2018-11-17 03:21:43,154] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager)
[2018-11-17 03:21:43,200] INFO [/config/changes-event-process-thread]: Starting (kafka.common.ZkNodeChangeNotificationListener$ChangeEventProcessThread)
[2018-11-17 03:21:43,235] INFO [SocketServer brokerId=0] Started processors for 1 acceptors (kafka.network.SocketServer)
[2018-11-17 03:21:43,238] INFO Kafka version : 2.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2018-11-17 03:21:43,238] INFO Kafka commitId : 3402a8361b734732 (org.apache.kafka.common.utils.AppInfoParser)
[2018-11-17 03:21:43,238] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
Note: Should start the zookeeper prior to Kafka server.
You can see the logs, we have successfully started the Zookeeper and Kafka servers.
Then why can’t we create a simple topic and try to exchange some messages between producer and consumer let’s start to do that
Create a Kafka Topic:
D:\Softwares\kafka_2.11-2.0.0\bin\windows>kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic items-topic
Created topic "items-topic".
Creating Kafka Producer:
D:\Softwares\kafka_2.11-2.0.0\bin\windows>kafka-console-producer.bat --broker-list localhost:9092 --topic items-topic
>hai chandra
>hello
Creating Kafka Consumer:
D:\Softwares\kafka_2.11-2.0.0\bin\windows>kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic items-topic --from-beginning
hai chandra
hello
If you see these messages on consumer console, you all done. Then you can play with producer and consumer terminal bypassing some Kafka messages.
References:
Apache Kafka quick start
Happy Learning 🙂
Share a word.
Related Posts
Page load link