Обзор инструментов командной строки Kafka: Справочное руководство по CLI
Apache Kafka — это мощная распределенная платформа потоковой передачи событий, обеспечивающая высокопроизводительные, отказоустойчивые и масштабируемые конвейеры данных реального времени. Хотя управление Kafka и взаимодействие с ним может осуществляться программно через его API, его инструменты командной строки (CLI) предлагают прямой и эффективный способ выполнения основных административных задач, управления топиками, взаимодействия с потребителями и мониторинга работоспособности кластера. Данное руководство представляет собой исчерпывающий справочник по наиболее часто используемым инструментам Kafka CLI, подробно описывающий их назначение, основные аргументы и практические сценарии использования.
Понимание этих инструментов имеет решающее значение для администраторов Kafka, разработчиков и всех, кто занимается управлением или устранением неполадок в кластерах Kafka. Они позволяют быстро проводить инспекцию, манипуляции и диагностику без необходимости написания пользовательских скриптов или приложений для каждой простой операции.
Основные инструменты Kafka CLI
Дистрибутивы Kafka обычно включают каталог bin/, содержащий различные скрипты и исполняемые файлы. Мы сосредоточимся на тех, которые используются чаще всего для эффективного управления Kafka.
1. kafka-topics.sh
Это, пожалуй, самый часто используемый инструмент командной строки. Он позволяет создавать, просматривать, описывать, удалять, изменять и управлять топиками Kafka. Управление топиками является основополагающим для организации потоков данных в Kafka.
Общие подкоманды и аргументы:
--create: Создает новый топик.--list: Выводит список всех топиков в кластере.--describe: Предоставляет подробную информацию о конкретных топиках.--delete: Удаляет один или несколько топиков.--alter: Изменяет конфигурацию существующего топика.--topic <topic_name>: Указывает имя топика.--partitions <num_partitions>: Устанавливает количество разделов (партиций) для топика (используется с--create).--replication-factor <factor>: Устанавливает коэффициент репликации для топика (используется с--create).--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.
Примеры:
-
Создание топика с именем
my_topic, 3 партициями и коэффициентом репликации 2:
bash kafka-topics.sh --create --topic my_topic --partitions 3 --replication-factor 2 --bootstrap-server kafka-broker-1:9092,kafka-broker-2:9092 -
Просмотр списка всех топиков в кластере:
bash kafka-topics.sh --list --bootstrap-server kafka-broker-1:9092 -
Описание топика с именем
my_topic:
bash kafka-topics.sh --describe --topic my_topic --bootstrap-server kafka-broker-1:9092
Это покажет такие детали, как партиции, лидер, реплики и ISR (In-Sync Replicas — синхронизированные реплики). -
Удаление топика с именем
old_topic:
bash kafka-topics.sh --delete --topic old_topic --bootstrap-server kafka-broker-1:9092
Примечание: Удаление топика должно быть включено в конфигурациях брокера Kafka (delete.topic.enable=true).
2. kafka-console-producer.sh
Этот инструмент позволяет отправлять сообщения в топик Kafka из стандартного ввода. Он незаменим для тестирования производителей (продюсеров), внедрения выборочных данных или ручной публикации сообщений.
Общие аргументы:
--topic <topic_name>: Указывает целевой топик.--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.--property <key>=<value>: Позволяет устанавливать свойства продюсера (например,key.serializer,value.serializer).--producer-property <key>=<value>: Аналогично--property, но специально для конфигураций на стороне продюсера.
Примеры:
-
Отправка сообщений в
my_topic:
bash kafka-console-producer.sh --topic my_topic --bootstrap-server kafka-broker-1:9092
После запуска вы можете вводить сообщения построчно. НажмитеCtrl+Cдля выхода. -
Отправка сообщений с ключами (формат JSON):
bash kafka-console-producer.sh --topic my_topic --bootstrap-server kafka-broker-1:9092 --property parse.key=true --property key.separator=':'
Теперь вы можете вводить парыkey:value, и Kafka будет отправлять их с указанным ключом.
3. kafka-console-consumer.sh
Этот инструмент подписывается на один или несколько топиков Kafka и выводит полученные сообщения в стандартный вывод. Он необходим для тестирования потребителей (консьюмеров), инспекции данных в топиках и отладки приложений продюсеров/консьюмеров.
Общие аргументы:
--topic <topic_name>: Указывает топик(и) для потребления.--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.--group-id <group_id>: Указывает идентификатор группы потребителей. Это важно для управления смещениями (офсетами) и обеспечения возможности совместного использования нагрузки потребления несколькими потребителями.--from-beginning: Читает сообщения с начала лога топика.--offset <offset>: Начинает потребление с определенного смещения (офсета).--partition <partition_id>: Потребляет данные из определенной партиции.--property <key>=<value>: Позволяет устанавливать свойства потребителя (например,value.deserializer).
Примеры:
-
Потребление всех сообщений из
my_topic:
bash kafka-console-consumer.sh --topic my_topic --bootstrap-server kafka-broker-1:9092 -
Потребление сообщений с начала
my_topicдля группы потребителейmy_group:
bash kafka-console-consumer.sh --topic my_topic --group-id my_group --from-beginning --bootstrap-server kafka-broker-1:9092 -
Потребление сообщений с выводом смещений и ключей:
bash kafka-console-consumer.sh --topic my_topic --bootstrap-server kafka-broker-1:9092 --property print.key=true --property key.separator="\t" --property print.offset=true --property print.headers=true
4. kafka-consumer-groups.sh
Этот инструмент используется для управления и инспекции групп потребителей. Он жизненно важен для понимания отставания потребителей (lag), перераспределения партиций и устранения проблем с потреблением.
Общие подкоманды и аргументы:
--list: Выводит список всех групп потребителей в кластере.--describe: Предоставляет подробную информацию о конкретных группах потребителей, включая отставание (lag).--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.--group <group_id>: Указывает идентификатор группы потребителей.--reset-offsets: Сбрасывает смещения (офсеты) для группы потребителей.--topic <topic_name>: Указывает топик для сброса смещений.--to-earliest: Сбрасывает смещения до самого раннего доступного сообщения.--to-latest: Сбрасывает смещения до самого последнего доступного сообщения.--execute: Выполняет операцию сброса смещений.
Примеры:
-
Просмотр списка всех групп потребителей:
bash kafka-consumer-groups.sh --list --bootstrap-server kafka-broker-1:9092 -
Описание группы потребителей
my_groupи отображение ее отставания:
bash kafka-consumer-groups.sh --describe --group my_group --bootstrap-server kafka-broker-1:9092
Вывод покажет топик, партицию, текущее смещение, смещение конца лога и отставание (lag). -
Сброс смещений для
my_groupв топикеmy_topicдо самого раннего доступного сообщения:
bash kafka-consumer-groups.sh --group my_group --topic my_topic --reset-offsets --to-earliest --execute --bootstrap-server kafka-broker-1:9092
Используйте эту команду с осторожностью, так как она влияет на то, с какого момента потребители начнут чтение.
5. kafka-log-dirs.sh
Этот инструмент помогает инспектировать каталоги логов на брокерах Kafka. Он может быть полезен для понимания использования диска и определения местоположения данных топиков.
Общие аргументы:
--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.--topic <topic_name>: Фильтрует вывод, чтобы показать каталоги для конкретного топика.
Примеры:
-
Просмотр списка каталогов логов на брокере:
bash kafka-log-dirs.sh --bootstrap-server kafka-broker-1:9092 -
Отображение каталогов логов для конкретного топика:
bash kafka-log-dirs.sh --bootstrap-server kafka-broker-1:9092 --topic my_topic
6. kafka-preferred-replica-election.sh
Этот скрипт инициирует выборы предпочтительных реплик для топиков. Предпочтительная реплика — это брокер, который выбран лидером для партиции на основе ее коэффициента репликации. Если брокер выходит из строя и лидером становится непредпочтительная реплика, этот инструмент можно использовать для возврата лидерства предпочтительной реплике.
Общие аргументы:
--topic <topic_name>: Указывает топик, для которого следует выбрать предпочтительные реплики.--broker-list <broker_id1,broker_id2,...>: Указывает разделенный запятыми список идентификаторов брокеров.--bootstrap-server <host:port>: Указывает брокер Kafka для подключения.
Примеры:
-
Выбор предпочтительных реплик для
my_topic:
bash kafka-preferred-replica-election.sh --topic my_topic --bootstrap-server kafka-broker-1:9092 -
Выбор предпочтительных реплик для нескольких топиков:
bash kafka-preferred-replica-election.sh --topic topic1,topic2 --bootstrap-server kafka-broker-1:9092
Важные соображения и лучшие практики
- Ключевой аргумент
--bootstrap-server: Всегда убеждайтесь, что вы указали правильный аргумент--bootstrap-serverдля подключения к вашему кластеру Kafka. Обычно это разделенный запятыми списокхост:портваших брокеров. - Окружение: Эти команды обычно находятся в каталоге
bin/вашей установки Kafka. Вам нужно будет перейти в этот каталог или убедиться, что каталогbinKafka добавлен в системный PATH. - Разрешения: Убедитесь, что пользователь, запускающий эти команды, имеет необходимый сетевой доступ для связи с брокерами Kafka.
- Конфигурация: Многие инструменты CLI могут принимать конфигурации клиента Kafka через аргументы
--propertyили--producer-property/--consumer-property. Это полезно для переопределения стандартных сериализаторов/десериализаторов или установки других специфических клиентских конфигураций. - Безопасность: Для защищенных кластеров Kafka (например, с аутентификацией SSL/TLS или SASL) вам потребуется передать дополнительные аргументы, связанные с безопасностью (например,
--command-config, указывающий на файл свойств клиента), этим инструментам. - Удаление топиков: Помните, что удаление топиков — это чувствительная операция, которая должна быть явно включена в файле
server.propertiesброкера Kafka с помощьюdelete.topic.enable=true.
Заключение
Инструменты командной строки Kafka предоставляют надежный и доступный интерфейс для управления и взаимодействия с вашим кластером Kafka. Освоение таких инструментов, как kafka-topics.sh, kafka-console-producer.sh, kafka-console-consumer.sh и kafka-consumer-groups.sh, имеет важное значение для эффективных операций Kafka, устранения неполадок и разработки. Понимая их аргументы и сценарии использования, вы можете значительно оптимизировать свой рабочий процесс и получить более глубокое представление об инфраструктуре потоковой передачи событий.
Регулярное обращение к этим командам не только поможет вам выполнять ежедневные административные задачи, но и позволит более эффективно диагностировать и устранять проблемы. По мере того как вы будете лучше знакомы с Kafka, вы сможете изучить другие служебные скрипты, доступные в каталоге bin/, для выполнения более сложных операций.