Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
223 Ключ конфигурации Описание file.delete.delay.ms Длительность.(в.миллисекундах).ожидания.перед.удалением. сегментов.журнала.и.индексов.для.данной.темы.с.диска flush.messages Количество.сообщений,.которое.может.быть.получено,.прежде.чем. будет.выполнен.принудительный.сброс.сообщений.данной.темы. на.диск flush.ms Промежуток.времени.(в.миллисекундах).перед.принудительным. сбросом.сообщений.данной.темы.на.диск index.interval.bytes Допустимое.количество.байтов.сообщений,.генерируемых.между. записями.индекса.сегмента.журнала max.message.bytes Максимальный.размер.отдельного.сообщения.данной.темы. (в.байтах) message.format.version Используемая.брокером.при.записи.сообщений.на.диск.версия. формата.сообщений..Должна.представлять.собой.допустимую. версию.API.(например,.0.10.0) message.timestamp.dif- ference.max.ms Максимально.допустимая.разница.(в.миллисекундах).между.меткой. даты/времени.отправки.сообщения.и.меткой.даты/времени.брокера. о.его.получении..Допустимо.только.в.случае,.если.ключ.message. timestamp.type.равен.CreateTime message.timestamp.type Используемая.при.записи.сообщений.на.диск.метка.даты/времени.. Текущие.значения.—.CreateTime.для.задаваемой.клиентом.метки. даты/времени.и.LogAppendTime.при.записи.сообщения.в.раздел. брокером min.cleanable.dirty.ratio Частота.попыток.сжатия.разделов.данной.темы.утилитой.сжатия. журналов.(в.виде.отношения.числа.несжатых.сегментов.журнала. к.общему.числу.сегментов)..Имеет.смысл.только.для.тем.со.сжатием. журналов min.insync.replicas Минимальное.количество.согласованных.реплик,.необходимое.для. того,.чтобы.раздел.темы.считался.доступным preallocate При.установке.в.true.место.под.сегменты.журналов.для.этой.темы. будет.выделяться.заранее,.при.создании.нового.сегмента retention.bytes Объем.хранимых.сообщений.этой.темы.(в.байтах) retention.ms Длительность.(в.миллисекундах).хранения.сообщений.данной.темы segment.bytes Объем.сообщений.(в.байтах),.записываемый.в.отдельный.сегмент. журнала.в.разделе segment.index.bytes Максимальный.размер.(в.байтах).отдельного.индекса.сегмента. журнала segment.jitter.ms Максимальное.число.миллисекунд,.задаваемых.случайным.образом. и.добавляемых.к.ключу.segment.ms.при.создании.сегментов.журналов segment.ms Частота.(в.миллисекундах).чередования.сегментов.журналов. для.каждого.из.разделов unclean.leader.elec- tion.enable При.установке.в.false.для.данной.темы.будет.запрещен.«нечистый». выбор.ведущей.реплики 224 Глава 9 • Администрирование Kafka Например,.установим.для.темы.my-topic.длительность.сохранения,.равную.1.ч. (3.600.000.мс): # kafka-configs.sh --zookeeper zoo1.example.com:2181/kafka-cluster --alter --entity-type topics --entity-name my-topic --add-config retention.ms=3600000 Updated config for topic: "my-topic". # Переопределение настроек клиентов по умолчанию Единственные.настройки,.которые.можно.переопределить.для.клиентов.Kafka,.—. квоты.производителей.и.потребителей..И.то.и.другое.представляет.собой.объем. данных.(в.байтах.в.секунду),.который.разрешается.генерировать/потреблять.всем. клиентам.с.заданным.идентификатором.клиента.в.расчете.на.одного.брокера.. То.есть.если.вы.задаете.квоту.в.10.Мбайт/с.на.клиент.для.кластера.в.пять.брокеров,. то.этот.клиент.сможет.генерировать.10.Мбайт/с.данных.для.каждого.из.брокеров,. что.в.итоге.составит.50.Мбайт/с. Идентификаторы клиентов и группы потребителей Идентификаторы клиентов — далеко не всегда то же самое, что название груп- пы потребителей. Потребители могут задавать собственные идентификаторы клиентов, так что вполне возможно существование в разных группах нескольких потребителей с одинаковым идентификатором клиента. Рекомендуется задавать уникальный идентификатор клиента для каждой группы потребителей, причем каким-то образом идентифицирующий ее. Благодаря этому группа потребителей сможет использовать квоту совместно, а поиск по журналам, какая группа от- вечает за запрос, значительно упростится. Формат.команды.изменения.настроек.клиента: kafka-configs.sh --zookeeper zoo1.example.com:2181/kafka-cluster --alter --entity-type clients --entity-name --add-config В.табл..9.3.приведены.настройки.(ключи.конфигурации).клиентов. Таблица 9.3. Настройки (ключи конфигурации) клиентов Ключ конфигурации Описание producer_bytes_rate Допустимый.объем.генерируемых.для.одного.брокера.в.секунду. по.отдельному.идентификатору.клиента.сообщений.(в.байтах) consumer_bytes_rate Допустимый.объем.потребляемых.из.одного.брокера.в.секунду. по.отдельному.идентификатору.клиента.сообщений.(в.байтах) Управление разделами 225 Описание переопределений настроек С.помощью.утилиты.командной.строки.можно.вывести.список.всех.переопре- делений.настроек.и.просмотреть.конкретные.настройки.темы.или.клиента.. Как.и.в.остальных.утилитах,.здесь.для.этого.используется.команда. --describe Например,.выведем.список.всех.переопределений.настроек.для.темы.my-topic: # kafka-configs.sh --zookeeper zoo1.example.com:2181/kafka-cluster --describe --entity-type topics --entity-name my-topic Configs for topics:my-topic are retention.ms=3600000,segment.ms=3600000 # Только переопределения настроек темы Описание конфигурации выводит только переопределения и не включает настрой- ки кластера по умолчанию. Сейчас не существует возможности ни через ZooKeeper, ни по протоколу Kafka динамически выяснить настройки самих брокеров. Это зна- чит, что в случае использования в ходе автоматизации вышеупомянутой утилиты для выяснения настроек темы или клиента необходимо отдельно предоставить ей информацию о настройках кластера по умолчанию. Удаление переопределений настроек Можно.полностью.удалить.динамические.настройки,.в.результате.чего.объект. возвратится.к.настройкам.кластера.по.умолчанию..Для.удаления.переопределений. настроек.используется.команда. --alter .с.параметром. --delete-config Например,.удалим.переопределения.настроек.ключа. retention.ms .для.темы.my- topic: # kafka-configs.sh --zookeeper zoo1.example.com:2181/kafka-cluster --alter --entity-type topics --entity-name my-topic --delete-config retention.ms Updated config for topic: "my-topic". # Управление разделами Среди.утилит.Kafka.есть.два.сценария.для.управления.разделами:.один.пред- назначен.для.повторного.выбора.ведущих.реплик,.а.второй.представляет.собой. низкоуровневую.утилиту.распределения.разделов.по.брокерам..С.их.помощью. можно.должным.образом.сбалансировать.трафик.сообщений.в.кластере.броке- ров.Kafka. 226 Глава 9 • Администрирование Kafka Выбор предпочтительной ведущей реплики Как.обсуждалось.в.главе.6,.у.разделов.может.быть.по.несколько.реплик,.для.боль- шей.надежности..Однако.только.одна.из.них.может.быть.ведущей.репликой.раз- дела,.и.вся.генерация.и.потребление.выполняются.на.соответствующем.брокере.. Эта.реплика.определяется.внутри.Kafka.как.первая.согласованная.в.списке.реплик,. но.в.случае.останова.и.перезапуска.брокера.не.становится.автоматически.ведущей. для.каких-либо.разделов. Автоматическое перераспределение ведущих реплик Существует настройка брокера для автоматического перераспределения ведущих реплик, но использовать ее при промышленной эксплуатации не рекомендуется. Модуль автоматической балансировки серьезно влияет на производительность и может привести к длительной приостановке трафика клиента, если кластеры большие. Один.из.способов.вернуть.брокерам.статус.ведущих.—.инициировать.выбор.пред- почтительной.ведущей.реплики..При.этом.контроллер.кластера.выбирает.опти- мальные.ведущие.реплики.для.разделов..Обычно.эта.операция.не.влияет.на.про- изводительность,.так.как.у.клиентов.есть.возможность.следить.за.сменой.ведущей. реплики.автоматически..Инициировать.эту.операцию.вручную.можно.с.помощью. утилиты. kafka-preferred-replica-election.sh Например,.запустим.выбор.предпочтительной.ведущей.реплики.для.всех.тем.кла- стера.с.одной.темой.из.восьми.разделов: # kafka-preferred-replica-election.sh --zookeeper zoo1.example.com:2181/kafka-cluster Successfully started preferred replica election for partitions Set([my-topic,5], [my-topic,0], [my-topic,7], [my-topic,4], [my-topic,6], [my-topic,2], [my-topic,3], [my-topic,1]) # Если.число.разделов.у.кластеров.велико,.запуск.отдельной.процедуры.выбора. предпочтительной.ведущей.реплики.может.завершиться.неудачей..Запрос.должен. быть.записан.в.z-узел.(znode).ZooKeeper.в.метаданных.кластера,.и.если.его.размер. превышает.размер.z-узла.(по.умолчанию.1.Мбайт),.то.произойдет.ошибка..В.этом. случае.необходимо.создать.файл.с.JSON-объектом,.содержащим.список.разделов,. и.разбить.запрос.на.несколько.шагов..Формат.для.этого.JSON-файла.следующий: { "partitions": [ { "partition": 1, "topic": "foo" }, Управление разделами 227 { "partition": 2, "topic": "foobar" } ] } Например,.инициируем.выбор.предпочтительной.ведущей.реплики.с.заданным. списком.разделов,.находящимся.в.файле. partitions.json : # kafka-preferred-replica-election.sh --zookeeper zoo1.example.com:2181/kafka-cluster --path-to-json-file partitions.json Successfully started preferred replica election for partitions Set([my-topic,1], [my-topic,2], [my-topic,3]) # Смена реплик раздела Время.от.времени.возникает.необходимость.изменить.распределение.реплик.для. раздела..Вот.несколько.примеров.таких.случаев. Разделы.темы.не.сбалансированы.в.масштабах.кластера,.что.приводит.к.не- равномерной.нагрузке.брокеров. Один.из.брокеров.отключился,.и.раздел.недореплицирован. Был.добавлен.новый.брокер,.и.ему.необходимо.выделить.часть.нагрузки.кла- стера. Для.выполнения.этой.операции.можно.воспользоваться.утилитой. kafka-reassign- partitions.sh ..Ее.необходимо.использовать.как.минимум.в.два.этапа..На.первом. этапе.на.основе.списка.брокеров.и.тем.генерируется.набор.перемещений,.выпол- няемых.на.втором.этапе..Существует.также.необязательный.третий.этап,.на.кото- ром.сгенерированный.список.используется.для.проверки.степени.завершенности. перераспределений.разделов. Для.генерации.набора.перемещений.разделов.необходимо.создать.файл.с.JSON- объектом,.содержащим.список.тем..Формат.JSON-объекта.следующий.(номер. версии.в.настоящий.момент.всегда.равен.1): { "topics": [ { "topic": "foo" }, { "topic": "foo1" } ], "version": 1 } 228 Глава 9 • Администрирование Kafka Например,.сгенерируем.перемещения.разделов,.чтобы.перенести.перечисленные. в.файле. topics.json .разделы.на.брокеры.с.идентификаторами.0.и.1: # kafka-reassign-partitions.sh --zookeeper zoo1.example.com:2181/kafka-cluster --generate --topics-to-move-json-file topics.json --broker-list 0,1 Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":5,"replicas":[0,1]}, {"topic":"my-topic","partition":10,"replicas":[1,0]},{"topic":"my-topic", "partition":1,"replicas":[0,1]},{"topic":"my-topic","partition":4,"replicas":[1,0]}, {"topic":"my-topic","partition":7,"replicas":[0,1]},{"topic":"my-topic", "partition":6,"replicas":[1,0]},{"topic":"my-topic","partition":3,"replicas":[0,1]}, {"topic":"my-topic","partition":15,"replicas":[0,1]},{"topic":"my-topic", "partition":0,"replicas":[1,0]},{"topic":"my-topic","partition":11,"replicas": [0,1]},{"topic":"my-topic","partition":8,"replicas":[1,0]},{"topic":"my-topic", "partition":12,"replicas":[1,0]},{"topic":"my-topic","partition":2,"replicas": [1,0]},{"topic":"my-topic","partition":13,"replicas":[0,1]},{"topic":"my-topic", "partition":14,"replicas":[1,0]},{"topic":"my-topic","partition":9,"replicas": [0,1]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":5,"replicas":[0,1]}, {"topic":"my-topic","partition":10,"replicas":[1,0]},{"topic":"my-topic", "partition":1,"replicas":[0,1]},{"topic":"my-topic","partition":4,"replicas":[1,0]}, {"topic":"my-topic","partition":7,"replicas":[0,1]},{"topic":"my-topic", "partition":6,"replicas":[1,0]},{"topic":"my-topic","partition":15,"replicas":[0,1]}, {"topic":"my-topic","partition":0,"replicas":[1,0]},{"topic":"my-topic", "partition":3,"replicas":[0,1]},{"topic":"my-topic","partition":11,"replicas":[0,1]}, {"topic":"my-topic","partition":8,"replicas":[1,0]},{"topic":"my-topic", "partition":12,"replicas":[1,0]},{"topic":"my-topic","partition":13,"replicas": [0,1]},{"topic":"my-topic","partition":2,"replicas":[1,0]},{"topic":"my-topic", "partition":14,"replicas":[1,0]},{"topic":"my-topic","partition":9, "replicas":[0,1]}]} # Список.брокеров.задается.через.командную.строку.утилиты.в.виде.разделенного. запятыми.списка.идентификаторов.брокеров..В.результате.утилита.выведет.в.стан- дартный.поток.вывода.два.JSON-объекта.с.описанием.текущего.распределения. разделов.для.тем.и.предлагаемого.распределения..Формат.этих.JSON-объектов:. {"partitions": [{"topic": "my-topic", "partition": 0, "replicas": [1,2] }], "version":_1_} Первый.JSON-объект.имеет.смысл.сохранить.на.случай.необходимости.возврата. к.прежнему.распределению..Второй.JSON-объект.—.с.предлагаемым.распределе- нием.—.необходимо.сохранить.в.новый.файл..Этот.файл.затем.передается.обратно. утилите. kafka-reassign-partitions.sh .для.второго.этапа. Например,.выполните.предлагаемое.перераспределение.разделов.из.файла. reassign.json : # kafka-reassign-partitions.sh --zookeeper zoo1.example.com:2181/kafka-cluster --execute --reassignment-json-file reassign.json Управление разделами 229 Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":5,"replicas":[0,1]}, {"topic":"my-topic","partition":10,"replicas":[1,0]},{"topic":"my-topic", "partition":1,"replicas":[0,1]},{"topic":"my-topic","partition":4,"replicas": [1,0]},{"topic":"my-topic","partition":7,"replicas":[0,1]},{"topic": "my-topic","partition":6,"replicas":[1,0]},{"topic":"my-topic","partition":3, "replicas":[0,1]},{"topic":"my-topic","partition":15,"replicas":[0,1]},{"topic": "my-topic","partition":0,"replicas":[1,0]},{"topic":"my-topic","partition":11, "replicas":[0,1]},{"topic":"my-topic","partition":8,"replicas":[1,0]},{"topic": "my-topic","partition":12,"replicas":[1,0]},{"topic":"my-topic","partition":2, "replicas":[1,0]},{"topic":"my-topic","partition":13,"replicas":[0,1]}, {"topic":"my-topic","partition":14,"replicas":[1,0]},{"topic":"my-topic", "partition":9,"replicas":[0,1]}]} Save this to use as the --reassignment-json-file option during rollback Successfully started reassignment of partitions {"version":1,"partitions": [{"topic":"my-topic","partition":5,"replicas":[0,1]},{"topic":"my-topic", "partition":0,"replicas":[1,0]},{"topic":"my-topic","partition":7,"replicas": [0,1]},{"topic":"my-topic","partition":13,"replicas":[0,1]},{"topic": "my-topic","partition":4,"replicas":[1,0]},{"topic":"my-topic","partition":12, "replicas":[1,0]},{"topic":"my-topic","partition":6,"replicas":[1,0]},{"topic": "my-topic","partition":11,"replicas":[0,1]},{"topic":"my-topic","partition":10, "replicas":[1,0]},{"topic":"my-topic","partition":9,"replicas":[0,1]},{"topic": "my-topic","partition":2,"replicas":[1,0]},{"topic":"my-topic","partition":14, "replicas":[1,0]},{"topic":"my-topic","partition":3,"replicas":[0,1]},{"topic": "my-topic","partition":1,"replicas":[0,1]},{"topic":"my-topic","partition":15, "replicas":[0,1]},{"topic":"my-topic","partition":8,"replicas":[1,0]}]} # Эта.команда.запустит.перераспределение.заданных.реплик.разделов.по.новым. брокерам..Контроллер.кластера.выполняет.это.действие.посредством.добавления. новых.реплик.в.список.реплик.каждого.из.разделов,.увеличивая.коэффициент. репликации..После.этого.новые.реплики.копируют.все.существующие.сообщения. для.всех.разделов.с.текущей.ведущей.реплики..В.зависимости.от.размера.разделов. на.диске.эта.операция.может.занять.немало.времени,.так.как.возникают.затраты. на.копирование.данных.по.сети.в.новые.реплики..После.завершения.репликации. контроллер.удаляет.старые.реплики.из.списка.реплик,.уменьшая.коэффициент. репликации.до.первоначального.значения. Повышение эффективности использования сети при переназначении реплик При удалении множества разделов с отдельного брокера, например, при удалении этого брокера из кластера, рекомендуется останавливать и перезапускать брокер перед началом переназначения. Это приведет к тому, что ведущими репликами для находящихся на этом брокере разделов станут другие брокеры кластера (если не включена возможность автоматического выбора ведущей реплики). Это значительно повышает производительность выполнения переназначений и снижает влияние на кластер, поскольку связанный с репликацией трафик будет распределяться по нескольким брокерам. 230 Глава 9 • Администрирование Kafka Во.время.выполнения.переназначения.и.после.его.завершения.можно.использовать. утилиту. kafka-reassign-partitions.sh .для.проверки.состояния.переназначе- ния..Это.позволит.выяснить,.сколько.переназначений.выполняется.в.настоящий. момент,.какие.из.них.были.завершены.и.какие.завершились.неудачей.в.случае. возникновения.ошибок..Для.этого.у.вас.должен.быть.файл.с.JSON-объектом,.за- действованным.на.этапе.выполнения. Например,.проверим.состояние.выполняющегося.переназначения.разделов.из. файла. reassign.json : # kafka-reassign-partitions.sh --zookeeper zoo1.example.com:2181/kafka-cluster --verify --reassignment-json-file reassign.json Status of partition reassignment: Reassignment of partition [my-topic,5] completed successfully Reassignment of partition [my-topic,0] completed successfully Reassignment of partition [my-topic,7] completed successfully Reassignment of partition [my-topic,13] completed successfully Reassignment of partition [my-topic,4] completed successfully Reassignment of partition [my-topic,12] completed successfully Reassignment of partition [my-topic,6] completed successfully Reassignment of partition [my-topic,11] completed successfully Reassignment of partition [my-topic,10] completed successfully Reassignment of partition [my-topic,9] completed successfully Reassignment of partition [my-topic,2] completed successfully Reassignment of partition [my-topic,14] completed successfully Reassignment of partition [my-topic,3] completed successfully Reassignment of partition [my-topic,1] completed successfully Reassignment of partition [my-topic,15] completed successfully Reassignment of partition [my-topic,8] completed successfully # |