Конфигурирование узла ZooKeeper#

В данном подразделе описывается конфигурирование ZooKeeper для запуска в качестве standalone-приложения на одной машине. Этот вид конфигурации не обеспечивает отказоустойчивости и не рекомендован для использования в промышленной эксплуатации.

Конфигурирование узла Apache ZooKeeper осуществляется в файле zookeeper.properties.

Минимальная конфигурация#

Пример конфигурационного файла zookeeper.properties для одного узла:

dataDir=/path/to/zookeeper-data
clientPort=2181
tickTime=2000

Шаги создания конфигурационного файла:

  1. Для переменной dataDir укажите путь к директории, в которую ZooKeeper будет сохранять файлы с данными, необходимыми ему для работы.

    Пример

    dataDir=/var/log/kafka_<версия Scala>-<версия Kafka>/zookeeper-data

  2. Для переменной clientPort укажите номер порта, к которому будут подключаться клиенты.

    Пример

    clientPort=2181

  3. Для переменной tickTime укажите единицу измерения времени ZooKeeper — это время в миллисекундах, которое уходит на один «тик» или «такт» ZooKeeper. tickTime неявно используется в настройках для различных временных параметров ZooKeeper. Например, для временной настройки initLimit=10 — это означает, что initLimit будет выполняться за 10 * tickTime миллисекунд.

    Пример

    tickTime=2000

Расширенная конфигурация#

Существует ряд дополнительных настроек, которые можно включить в конфигурационный файл:

  • maxClientCnxns — максимально допустимое количество соединений (на уровне сокетов), устанавливаемых клиентом (IP-адрес) с одним из серверов кластера ZooKeeper.

    Если значение равно нулю или настройка не указана в файле конфигураций, то количество одновременных подключений считается неограниченным.

    Данная настройка позволяет предотвратить некоторые виды DoS-атак.

    Пример

    maxClientCnxns=0

  • dataLogDir — позволяет выделить отдельную директорию для хранения транзакционного лога ZooKeeper. По умолчанию все транзакционные логи ZooKeeper (файлы log.) хранятся вместе с файлами snapshot. (снепшоты), в одной общей директории dataDir.

    Свойство dataLogDir может быть использовано для сохранения транзакционных логов в памяти отдельного устройства, то есть в памяти другого физического, а не логического диска, для достижения наилучшей производительности (за счет уменьшения нагрузки на диск).

    Пример

    dataLogDir=/another/path/to/zookeeper-logs

    Данные ZooKeeper — это персистентные (неизменяемые) копии ZooKeeper-узлов (znodes), хранимые соответствующим ансамблем на диске в виде файлов двух видов:

    • Транзакционные логи (transaction log) — это файлы с префиксом log., в которые в последовательном порядке записываются все изменения, происходящие с ZooKeeper-узлами.

    • Снепшоты (snapshot) — это файлы с префиксом snapshot. Когда файл транзакционного лога достигает определенного размера, создается копия текущего состояния всех ZooKeeper-узлов в виде снепшота. Этот снепшот заменяет все предыдущие логи.

    Примечание

    Устаревшие версии файлов транзакционных логов и снепшотов не удаляются с диска сервером ZooKeeper — эта задача полностью ложится на администратора ZooKeeper.

  • globalOutstandingLimit — ограничение времени, позволяющее регулировать количество обращений клиентов к серверу ZooKeeper. Поскольку клиенты отправляют запросы быстрее, чем сервер успевает их обработать, сервер может не справиться и израсходовать всю доступную память. По умолчанию число запросов, находящихся в обработке в некоторый момент времени, не превышает 1000.

    Пример

    globalOutstandingLimit=1000

  • preAllocSize — размер блока лог-файлов транзакций. По умолчанию равен 64 Мбайт. Использование транзакционного лога минимизирует количество обращений к диску. Если снепшоты ZooKeeper создаются слишком часто, размер логов транзакций может не достигать 64 Мбайт. В таких ситуациях включение этого параметра позволяет оптимизировать расход объема дискового пространства.

  • snapCount — число транзакций, которые будут записаны в лог транзакций после создания очередного снепшота (snapshot) — файла данных ZooKeeper. По умолчанию — 100000.

    Чтобы предотвратить одновременное создание снепшота всеми серверами в кворуме, каждый сервер ZooKeeper сделает снепшот, когда количество транзакций в лог-файле транзакций достигнет случайного значения, сгенерированного во время выполнения в диапазоне [snapCount/2+1, snapCount].

    Пример

    snapCount =100000

  • traceFile — файл трассировки в формате traceFile.year.month.day, в который будут записываться все запросы клиентов. Полезен в целях отладки. Побочный эффект — некоторый спад производительности.

Текущая используемая конфигурация#

Конфигурационный файл zookeeper.properties для ZooKeeper следующий:

dataDir=/tmp/kafka/zookeeper
clientPort=2181
maxClientCnxns=0