Статьи

Скриптинг Tmux для Кафки

Я знал о tmux уже некоторое время, но продолжал работать с ним. В последнее время я начал смотреть на Processor API, доступный в Kafka . Открыв 4-5 окон терминала (Zookeeper, Kafka, посылая сообщения, получая сообщения) и переключившись между ними, я быстро понял, что мне нужен способ открыть эти терминальные сессии одновременно и централизовать их. У меня был идеальный вариант использования tmux! Этот пост о сценариях tmux для экономии времени во время разработки, в данном случае работы с kafka.

В этом посте мы предполагаем, что читатель уже знаком с zookeeper и kafka.

Получение Tmux

Прежде чем мы начнем, полезно знать, как мы можем установить tmux. Tmux можно скачать с основного сайта. В моем случае я использую Mac, поэтому я использовал homebrew — brew install tmux.

Скриптинг Tmux

Я хотел сценарий для создания следующего рабочего пространства:

  1. Zookeeper работает на собственной панели.
  2. Сервер Kafka работает на собственной панели.
  3. Отдельная панель для отправки сообщений.
  4. Отдельная панель для приема сообщений.
  5. Наконец, панель для запуска кода моего кафки-процессора или выполнения специальных задач.

Я хотел, чтобы zookeeper и kafka запускались автоматически, производитель сообщений и потребитель, которых я остановил бы и начал по мере необходимости. Но я бы хотел, чтобы каждая соответствующая панель переписывалась в каталог базовой установки kafka. Как только я нашел соответствующие команды tmux, это было легко настроить. Вот сценарий:

#!/bin/sh

KAFKA_DIR=/usr/local/kafka_2.11-0.9.0.0-SNAPSHOT

START_ZK="./bin/zookeeper-server-start.sh"
ZK_PROPS="config/zookeeper.properties"

START_KAFKA="./bin/kafka-server-start.sh"
KAFKA_PROPS="config/server.properties"

tmux new-session -s kafka-work -d

#split screen in have horizontally
tmux split-window -v
#split the second half in half again
tmux split-window -v

#split the top window in half vertically
tmux split-window -h -t 0
#split the new half top window in half horizontally
tmux split-window -v

#cd into kafka directory
tmux send-keys -t 1 "cd $KAFKA_DIR"  C-m
#start zookeeper
tmux send-keys -t 1 "$START_ZK  $ZK_PROPS" C-m

tmux send-keys -t 2 "cd $KAFKA_DIR"  C-m
tmux send-keys -t 2 "$START_KAFKA $KAFKA_PROPS" C-m

tmux send-keys -t 3 "cd $KAFKA_DIR"  C-m
tmux send-keys -t 4 "cd $KAFKA_DIR"  C-m

tmux attach -t kafka-work

Хотя подробное описание tmux выходит за рамки этого поста, будет полезно дать краткое описание команд tmux в сценарии.

Разделение панелей

В сценарии есть несколько split-windowкоманд, и они делают то, что вы ожидаете, разбивая окно по горизонтали или по вертикали. Что не так очевидно, так это то, split-window -vчто окно разбивается по горизонтали и split-window -hразбивается по вертикали . Tmux видит получающиеся панели иначе, чем мы, люди. Когда окно разделено по горизонтали, две панели накладываются друг на друга по вертикали, а для разделения по вертикали панели располагаются горизонтально рядом друг с другом. Есть одно последнее замечание о разбивке окна на панели, которое необходимо упомянуть. Когдаsplit-windowвыдается команда, курсор попадает в последнюю созданную панель. Это важно иметь в виду, если вы собираетесь вводить дополнительные команды, но не хотите, чтобы они выполнялись на только что созданной панели.

Номера панелей

По умолчанию tmux нумерует панели в данном окне, начиная с 0. Если начальное окно разделено на две панели по горизонтали, верхняя панель по-прежнему равна 0, а нижняя половина — теперь номер 1. Хотя это кажется очень естественным, когда дополнительные панели разбиты по разным областям, нумерация может показаться запутанной. Просто имейте в виду, что панели нумеруются в порядке создания.

Отправка команд на панели

Наконец, у нас есть send-keys -t N <some command>команды в сценарии. Это так, что мы можем нацелить на конкретную панель с помощью данной команды. В нашем случае мы хотим, чтобы 4 наши панели находились в каталоге базовой установки kakfa, поэтому мы запускаем tmux send-keys -t N "cd $KAFKA_DIR" C-mкоманду. Существует 4 таких команды, каждая с определенной целевой панелью 1-4. Мы хотим запустить zookeeper на панели 1, чтобы tmux send-keys -t 1 "$START_ZK $ZK_PROPS" C-mкоманда использовалась. Чтобы запустить сервер kafka, мы запускаем очень похожую команду, за исключением того, что панель 2 является целевой.

Финал Tmux — Кафка Результаты

Вот снимок экрана с окончательными результатами запуска скрипта kafka-tmux. Цифры на панелях приведены только для иллюстрации.

Вывод

Это был быстрый тур по Tmux. Он ужасно неполный и лишь поверхностно рассказывает о том, что мы можем сделать с tmux и как его можно настроить. Я просто хотел поделиться своим сценарием на случай, если кто-то найдет его полезным. Спасибо за ваше время.