Что такое Topic в Kafka?
Consumers(потребители) или конечные пользователи не могут эффективно получать нужные данные с серверов Kafka. Чтобы избежать сложностей, связанных с наличием беспорядочных и неорганизованных данных на серверах Kafka, пользователи могут создавать различные топики Kafka на сервере Kafka.
Kafka Topic позволяет пользователям хранить и систематизировать данные в соответствии с различными категориями и вариантами использования, что позволяет пользователям легко создавать и использовать сообщения на серверах Kafka и обратно.
В этой статье вы узнаете о Kafka Topic и этапах создания топиков Kafka на сервере Kafka. Читайте дальше!
Что такое Topic Apache Kafka?
Apache Kafka имеет специальный фундаментальный модуль для организации событий или сообщений, который называется «Topics». Другими словами, топики Kafka — это виртуальные группы или журналы, в которых сообщения и события хранятся в логическом порядке, что позволяет пользователям с легкостью отправлять и получать данные между серверами Kafka.
Когда Producer отправляет сообщения или события в определенный топик Kafka, топики добавляют сообщения одно за другим, тем самым создавая файл журнала. Более того, производители могут помещать сообщения в хвост этих вновь созданных журналов, в то время как Consumer извлекают сообщения из определенной темы Kafka.
Создавая топики Kafka, пользователи могут выполнять логическое разделение между сообщениями и событиями, что работает так же, как концепция разных таблиц, содержащих разные типы данных в базе данных.
В Apache Kafka вы можете создавать любое количество топиков в зависимости от ваших сценариев использования. Однако каждый топик должна иметь уникальное и идентифицируемое имя, чтобы отличать его от разных брокеров Kafka в кластере Kafka.
Kafka Topic Partition
Самым большим преимуществом Apache Kafka является его способность масштабироваться. Если бы топики Kafka были ограничены одной машиной или кластером, это было бы самым большим препятствием для масштабирования. К счастью, у Apache Kafka есть решение этой проблемы.
Apache Kafka делит темы на несколько разделов (partition). Для лучшего понимания вы можете представить Kafka Topic как гигантский набор, а Kafka Partitions — как меньшие подмножества записей, принадлежащих Kafka Topics. Каждая запись содержит уникальный последовательный идентификатор, называемый Offset, который постепенно назначается Apache Kafka. Это помогает разделу Kafka работать как одна запись журнала, которая записывается в режиме только добавления.
Способ структурирования разделов Kafka дает Apache Kafka возможность легкого масштабирования. Разделы Kafka позволяют распараллеливать топики путем разделения данных конкретного топика Kafka по нескольким брокерам. Каждый брокер хранит подмножество записей, принадлежащих всему кластеру Kafka.
Apache Kafka обеспечивает репликацию на уровне разделов. Избыточные единицы в тематических разделах называются репликами, и каждый раздел обычно содержит одну или несколько реплик. То есть раздел содержит сообщения, которые реплицируются через несколько брокеров Kafka в кластере. Каждый раздел (реплика) имеет один сервер, который действует как лидер, и другой набор серверов, которые действуют как последователи.
Реплика лидера Kafka обрабатывает все запросы на чтение/запись для определенного раздела, а последователи Kafka имитируют лидера. Apache Kafka достаточно умен, поэтому в случае выхода из строя вашего ведущего сервера один из ведомых серверов становится лидером. Хорошей практикой является попытка сбалансировать лидеров так, чтобы каждый брокер был лидером одинакового количества разделов.
Когда Producer публикует запись в Topic, он закрепляется за ее Лидером. Лидер добавляет запись в журнал фиксации и увеличивает смещение записи. Kafka делает записи доступными для потребителей только после того, как они были зафиксированы, а все входящие данные складываются в кластер Kafka.
Каждый Producer Kafka использует метаданные о кластере, чтобы распознавать ведущего брокера и место назначения для каждого раздела. Producer Kafka также могут добавить к записи ключ, указывающий на раздел, в котором будет находиться запись, и использовать хэш ключа для расчета раздела. В качестве альтернативы вы можете пропустить этот шаг и указать раздел самостоятельно.
Давайте рассмотрим пример, чтобы понять Kafka Topic с его разделами.
Kafka Topics
Рассмотрим топик с тремя разделами, помеченными 0, 1 и 2. Каждый раздел имеет отдельные номера смещений, распределяя данные по каждому смещению внутри соответствующего раздела.
Примечательно, что данные по смещению 1 раздела 0 не связаны с данными по смещению 1 раздела 1. Однако существует взаимозависимость между данными по смещению 1 раздела 0 и данными по смещению 2 раздела 0.
Брокеры
В этом контексте Apache Kafka играет решающую роль. Кластер Kafka состоит из одного или нескольких серверов, известных как брокеры или брокеры Kafka. Каждый брокер, идентифицируемый целочисленным идентификатором, действует как контейнер, содержащий несколько топиков с соответствующими разделами. Брокеры также называются брокерами Bootstrap, поскольку при подключении к любому одному брокеру устанавливается соединение со всем кластером. Хотя брокер не хранит весь набор данных, каждый брокер в кластере знает о других брокерах, разделах и топиках.
Пример топиков Kafka
Представьте себе кластер Kafka, состоящий из трех брокеров: Брокер 1, Брокер 2 и Брокер 3.
Настройка брокера
У каждого брокера есть топик, скажем Topic-x, с тремя разделами (0, 1 и 2). Важно отметить, что разделы распределены между брокерами, и брокер может содержать разделы по разным тематикам. Брокер 1 и Брокер 2 также имеют еще один топик Topic-y с двумя разделами (0 и 1). Брокер 3, однако, не хранит никаких данных из Topic-y. Стоит подчеркнуть, что не существует внутренней корреляции между номерами брокеров и номерами разделов.
Как создавать топики Apache Kafka?
Вот простые 3 шага, используемые для создания топика Apache Kafka:
- Шаг 1. Настройка среды Apache Kafka
- Шаг 2. Создание и настройка тем Apache Kafka
- Шаг 3. Отправка и получение сообщений с использованием тем Apache Kafka
Шаг 1. Настройка среды Apache Kafka
В этом методе вы будете создавать темы Kafka, используя инструмент командной строки по умолчанию, то есть командную строку. Другими словами, вы можете писать текстовые команды в терминале командной строки для создания и настройки тем Kafka.
Ниже приведены шаги по созданию топиков Kafka и настройке вновь созданных топиков для отправки и получения сообщений.
- Чтобы создавать темы Kafka, вам необходимо запустить и настроить среду Kafka. Перед этим убедитесь, что Kafka и Zookeeper предварительно установлены, настроены и работают на вашем локальном компьютере. Вы также должны убедиться, что версия Java 8+ установлена и работает на вашем компьютере. Затем настройте путь к файлу и переменные среды Java_Home, чтобы ваша операционная система могла находить утилиты Java.
- Чтобы запустить Apache Kafka, откройте новую командную строку и введите следующую команду:
.binwindowskafka-server-start.bat .configserver.properties
- Чтобы запустить Zookeeper, откройте другую командную строку и введите команду ниже. Как правило, Apache Kafka использует Zookeeper для управления и хранения всех метаданных и информации кластера. В результате вам придется запускать экземпляр Zookeeper вместе с Kafka во время передачи сообщений.
zookeeper-server-start.bat .configzookeeper.properties
Теперь Kafka и Zookeeper запустились и успешно работают.
Шаг 2. Создание и настройка топиков Apache Kafka
- На дальнейших шагах вы увидите, как создавать топики Kafka и настраивать их для эффективной передачи сообщений.
- Чтобы создать новый топик Kafka, откройте отдельное окно командной строки:
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Когда вышеуказанная команда будет выполнена успешно, в командной строке вы увидите сообщение «Created Topic Test». С помощью приведенной выше команды вы создали новый топик под названием «Topic Test» с одним разделом и одним фактором репликации.
Команда состоит из таких атрибутов, как Create, Zookeeper, localhost:2181, Replication-factor, Partitions:
- Create: это базовая команда для создания новой темы Kafka.
- Partitions. Вновь созданные темы можно разделить и хранить в одном или нескольких разделах, чтобы обеспечить единообразное масштабирование и балансировку сообщений или нагрузок. В вышеупомянутой основной команде вы создадите только один раздел . Когда сервер Kafka обрабатывает или передает большие данные, вы можете даже иметь десять разделов для одной темы и 10 000 разделов на кластер Kafka.
- Replication-factor: Фактор репликации определяет количество копий или реплик топиков в кластере Kafka. Если вы укажете коэффициент репликации равным 1 , вы создадите одну копию или репликацию только что созданного топика. Аналогично, если вы указываете коэффициент репликации равным 2, вы делаете две копии для соответствующей темы. сервера Kafka Эта функция репликации обеспечивает высокую отказоустойчивость . Поскольку он реплицирует и распределяет топики по другим серверам Kafka, в случае сбоя одного из серверов топик/данные будут доступны на других серверах.
- Zookeeper localhost:2181: Этот атрибут указывает, что ваш экземпляр Zookeeper работает на порту 2181. Когда вы вводите команду для создания тем в Kafka, команда будет перенаправлена на экземпляр Zookeeper, работающий вместе с Kafka. Кроме того, Zookeeper перенаправляет ваш командный запрос на сервер или брокер Kafka для создания новой темы Kafka.
Топики Kafka всегда должны иметь уникальное имя, позволяющее различать и однозначно идентифицировать другие темы, которые будут созданы в будущем. В этом случае вы присваиваете теме «Topic Test» в качестве уникального имени. Это имя можно использовать для настройки элементов топика на дальнейших шагах.
Выполнив описанные выше шаги, вы успешно создали новый топик Kafka. Вы можете перечислить ранее созданные топики Kafka, используя команду, приведенную ниже.
'kafka-topics.bat -zookeeper localhost:2181 -list'.
Вы также можете получить информацию о вновь созданном топике, используя следующую команду. Приведенная ниже команда описывает информацию о топиках Kafka, такую как имя топика, количество разделов и реплик.
kafka-topics.bat -zookeeper localhost:2181 -describe --topic <the_topic_name>
После создания топиков в Kafka вы можете начать создавать и использовать сообщения на дальнейших шагах. есть сценарии « bin/kafka-console-producer.bat» и « bin/kafka-console-consumer.bat По умолчанию в вашем основном каталоге Kafka ». Такие предварительно написанные сценарии Producer и Consumer отвечают за запуск консолей Kafka Producer и Kafka Consumer соответственно.
Первоначально вам нужно использовать Kafka Producer для отправки или создания сообщений в топике Kafka. Затем вы будете использовать Kafka Consumer для получения или использования сообщений из Kafka Topics.
Для этого откройте новую командную строку и введите следующую команду.
kafka-console-producer.bat --broker-list localhost:9092 --topic test
После выполнения команды вы увидите «>» часто мигающий курсор . Теперь вы можете подтвердить, что находитесь в консоли или окне Producer.
После запуска Producer Kafka вам необходимо запустить потребителя Kafka. Откройте новое командное окно и введите приведенную ниже команду в соответствии с вашей версией Kafka. Если вы используете старую версию Kafka (версия <2.0) , введите команду, указанную ниже.
kafka-console-consumer.bat --zookeeper
localhost:2181 --topic test
Если вы используете последние версии Kafka (версия > 2.0) , введите команду, указанную ниже.
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
В приведенных выше командах «Topic Test» — это имя топика, внутри которой пользователи будут создавать и хранить сообщения на сервере Kafka. То же имя топика будет использоваться на стороне Consumer для потребления или получения сообщений с сервера Kafka.
После выполнения вышеуказанных шагов вы успешно запустили консоли производителя и потребителя Apache Kafka. Теперь вы можете писать сообщения на панели производителя и получать сообщения на панели потребителя.
Шаг 3. Отправка и получение сообщений с использованием топиков Apache Kafka
Откройте консоль производителя Apache Kafka и консоль потребителя параллельно друг другу. Начните вводить любой текст или сообщения в консоли Producer. Вы можете видеть, что сообщения, которые вы публикуете в консоли производителя, принимаются и отображаются в консоли потребителя.
С помощью этого метода вы настроили производителя и потребителя Apache Kafka для записи и чтения сообщений . успешной
Вы можете перейти к каталогам данных Apache Kafka, чтобы убедиться, что создание темы прошло успешно. Открыв каталог данных Apache Kafka, вы сможете найти созданные ранее темы для хранения сообщений. В каталоге такие темы представлены в виде папок.
Если вы создали разделы для своих топиков, вы можете видеть, что папки тем разделены внутри одного каталога в соответствии с заданным количеством разделов. В каталоге данных Kafka вы увидите несколько файлов с именем « Consumer Offsets », в которых хранится вся информация о конфигурации потребителя и сообщениях в соответствии с темами Apache Kafka.
Выполнив эти шаги, вы можете подтвердить и убедиться, что Apache Kafka правильно работает при операциях создания и потребления сообщений.
Где хранятся топики Kafka?
Темы Kafka хранятся распределенно по кластеру Kafka. В частности, каждый раздел Kafka, принадлежащий теме, представляет собой упорядоченную неизменяемую последовательность записей, к которой постоянно добавляются. Эти разделы распределены по серверам в кластере Kafka, причем каждому серверу назначено определенное количество разделов.
Сами разделы для топиков Kafka фактически сохраняются в виде файлов журналов в файловой системе брокеров Kafka. Каждый файл журнала содержит данные только для одного раздела. Внутри файла журнала данные хранятся в том порядке, в котором они были получены разделом. Таким образом, физическое место хранения темы Kafka разделено между многими брокерами внутри кластера, причем каждый брокер сохраняет один или несколько разделов темы в локальных файлах журналов на диске.
Как просмотреть список топиков Kafka?
1. Использование kafka-topics.sh
сценарий:
Это рекомендуемый метод доступа к инструментам интерфейса командной строки Kafka. Он поставляется в комплекте с Apache Kafka и доступен на всех платформах. Вот как его использовать:
kafka-topics.sh --bootstrap-server <BOOTSTRAP_SERVER> --list
- Заменять
<BOOTSTRAP_SERVER>
с адресом вашего брокера Kafka (например,localhost:9092
). - The
--list
Опция указывает сценарию перечислить все доступные темы. - Этот метод также работает со старыми версиями Kafka, используя
--zookeeper
вариант вместо--bootstrap-server
.
2. Использование Kafka AdminClient API:
Если вы работаете с Kafka в коде, вы можете использовать API AdminClient для вывода списка топиков. Вот пример на Java:
Properties props = new Properties();
props.put("bootstrap.servers", "<BOOTSTRAP_SERVER>");
AdminClient adminClient = AdminClient.create(props);
List<String> topics = adminClient.listTopics().names();
adminClient.close();
for (String topic : topics) {
System.out.println(topic);
}
- Не забудьте заменить
<BOOTSTRAP_SERVER>
с вашей реальной свойством. - Этот метод дает вам больше контроля над фильтрацией и форматированием вывода.
Как очистить топик Кафки?
Чтобы удалить топик Kafka, сначала проверьте несколько параметров:
- Для версий Kafka 2.2 и выше используйте имя хоста и порт Kafka (например, localhost:9092).
- Для более старых версий Kafka используйте URL-адрес и порт Zookeeper (например, localhost:2181).
- Используйте интерфейс командной строки kafka-topics.sh с опцией –delete.
- Подтвердите, что брокеры Kafka разрешают удаление топиков с настройкой delete.topic.enable=true (по умолчанию).
Пример
Удаление топика с именем «first_topic», пока наш брокер Kafka работает на локальном хосте: 9092.
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic first_topic
kafka-topics.sh --zookeeper localhost:2181 --delete --topic first_topic
Заключение
В этой статье вы узнали об Apache Kafka, топиках Apache Kafka и шагах по созданию топика Apache Kafka. Вы изучили ручной метод создания топиков и настройки конфигураций тем в Apache Kafka с помощью инструмента командной строки или командной строки.