Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
Выбор размера ансамбля ZooKeeper Рассмотрим вариант работы ZooKeeper в ансамбле из пяти узлов. Чтобы внести изменения в настройки ансамбля, включая настройки подкачки узлов, необходи- мо перезагрузить узлы по одному за раз. Если ансамбль не может функциониро- вать при выходе из строя более чем одного узла одновременно, данные работы по обслуживанию становятся источником дополнительного риска. Кроме того, не рекомендуется запускать одновременно более семи узлов, поскольку произво- дительность начнет страдать вследствие самой природы протокола консенсуса. Для.настройки.работы.серверов.ZooKeeper.в.ансамбле.у.них.должна.быть.единая. конфигурация.со.списком.всех.серверов,.а.у.каждого.сервера.в.каталоге.данных. Установка брокера Kafka 45 должен.иметься.файл. myid .с.идентификатором.этого.сервера..Если.хосты.в.ансамбле. носят.названия. zoo1.example.com ,. zoo2.example.com .и. zoo3.example.com ,.то.файл. конфигурации.может.выглядеть.приблизительно.так: tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=20 syncLimit=5 server.1=zoo1.example.com:2888:3888 server.2=zoo2.example.com:2888:3888 server.3=zoo3.example.com:2888:3888 В.этой.конфигурации. initLimit .представляет.собой.промежуток.времени,.на. протяжении.которого.ведомые.узлы.могут.подключаться.к.ведущему..Значение. syncLimit .ограничивает.отставание.ведомых.узлов.от.ведущего..Оба.значения. задаются.в.единицах. tickTime ,.то.есть. initLimit .=.20.·.2000.мс.=.40.с..В.конфи- гурации.также.перечисляются.все.серверы.ансамбля..Они.приводятся.в.формате. server.X=hostname:peerPort:leaderPort .со.следующими.параметрами: X —.идентификатор.сервера..Обязан.быть.целым.числом,.но.отсчет.может.ве- стись.не.от.нуля.и.не.быть.последовательным; hostname —.имя.хоста.или.IP-адрес.сервера; peerPort —.TCP-порт,.через.который.серверы.ансамбля.взаимодействуют.друг. с.другом; leaderPort —.TCP-порт,.через.который.осуществляется.выбор.ведущего.узла. Достаточно,.чтобы.клиенты.могли.подключаться.к.ансамблю.через.порт. clientPort ,. но.участники.ансамбля.должны.иметь.возможность.обмениваться.сообщениями. друг.с.другом.по.всем.трем.портам. Помимо.единого.файла.конфигурации.у.каждого.сервера.в.каталоге. dataDir .должен. быть.файл. myid ..Он.должен.содержать.идентификатор.сервера,.соответствующий. приведенному.в.файле.конфигурации..После.завершения.этих.шагов.можно.запу- стить.серверы,.и.они.будут.взаимодействовать.друг.с.другом.в.ансамбле. Установка брокера Kafka После.завершения.настройки.Java.и.ZooKeeper.можно.приступать.к.установ- ке.Apache.Kafka..Актуальный.выпуск.Apache.Kafka.можно.скачать.по.адресу. http://kafka.apache.org/downloads.html ..На.момент.публикации.данной.книги.это.вер- сия.0.9.0.1,.работающая.под.управлением.Scala.2.11.0 1 1. На.момент.выхода.из.печати.русского.издания.—.1.1.1.и.Scala.2.12.6.соответственно..—. Примеч. пер. 46 Глава 2 • Установка Kafka В.следующем.примере.установим.платформу.Kafka.в.каталог. /usr/local/kafka ,. настроив.ее.для.использования.запущенного.ранее.сервера.ZooKeeper.и.сохранения. сегментов.журнала.сообщений.в.каталоге. /tmp/kafka-logs : # tar -zxf kafka_2.11-0.9.0.1.tgz # mv kafka_2.11-0.9.0.1 /usr/local/kafka # mkdir /tmp/kafka-logs # export JAVA_HOME=/usr/java/jdk1.8.0_51 # /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties # После.запуска.брокера.Kafka.можно.проверить.его.функционирование,.выполнив. какие-либо.простые.операции.с.кластером,.включающие.создание.тестовой.темы,. генерацию.сообщений.и.их.потребление. Создание.и.проверка.темы: # /usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test Created topic "test". # /usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test Topic:test PartitionCount:1 ReplicationFactor:1 Configs: Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0 # Генерация.сообщений.для.темы. test : # /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test Test Message 1 Test Message 2 ^D # Потребление.сообщений.из.темы. test : # /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning Test Message 1 Test Message 2 ^C Consumed 2 messages # Конфигурация брокера Пример.конфигурации.брокера,.поставляемый.вместе.с.дистрибутивом.Kafka,. вполне.подойдет.для.пробного.запуска.автономного.сервера,.но.для.большинства. установок.его.будет.недостаточно..Существует.множество.параметров.конфигу- рации.Kafka,.регулирующих.все.аспекты.установки.и.настройки..Для.многих.из. Конфигурация брокера 47 них.можно.оставить.значения.по.умолчанию,.поскольку.они.относятся.к.нюансам. настройки.брокера.Kafka,.не.применяемым.до.тех.пор,.пока.вы.не.будете.работать. с.требующим.их.использования.конкретным.сценарием. Основные настройки брокера Существует.несколько.настроек.брокера.Kafka,.которые.желательно.обдумать. при.развертывании.платформы.в.любой.среде,.кроме.автономного.брокера.на. отдельном.сервере..Эти.параметры.относятся.к.основным.настройкам.брокера,. и.большинство.из.них.нужно.обязательно.поменять,.чтобы.брокер.мог.работать. в.кластере.с.другими.брокерами. broker.id У.каждого.брокера.Kafka.должен.быть.целочисленный.идентификатор,.задаваемый. посредством.параметра. broker.id ..По.умолчанию.это.значение.равно.0,.но.может. быть.любым.числом..Главное,.чтобы.оно.не.повторялось.в.пределах.одного.кла- стера.Kafka..Выбор.числа.может.быть.произвольным,.причем.при.необходимости. ради.удобства.сопровождения.его.можно.переносить.с.одного.брокера.на.другой.. Желательно,.чтобы.это.число.было.как-то.связано.с.хостом,.тогда.более.прозрач- ным.окажется.соответствие.идентификаторов.брокеров.хостам.при.сопровожде- нии..Например,.если.у.вас.имена.хостов.содержат.уникальные.числа.(например,. host1.example.com ,. host2.example.com .и.т..д.),.эти.числа.будут.удачным.выбором. для.значений. broker.id port Типовой.файл.конфигурации.запускает.Kafka.с.прослушивателем.на.TCP-порту. 9092..Этот.порт.можно.изменить.на.любой.другой.доступный.путем.изменения. параметра.конфигурации. port ..Имейте.в.виду,.что.при.выборе.порта.с.номером. менее.1024.Kafka.должна.запускаться.от.имени.пользователя. root ..А.запускать. Kafka.от.имени.пользователя. root .не.рекомендуется. zookeeper.connect Путь,.который.ZooKeeper.использует.для.хранения.метаданных.брокеров,.задается. с.помощью.параметра.конфигурации. zookeeper.connect ..В.образце.конфигурации. ZooKeeper.работает.на.порту.2181.на.локальной.хост-машине,.что.указывается.как. localhost:2181 ..Формат.этого.параметра.—.разделенный.точками.с.запятой.список. строк.вида. hostname:port/path ,.включающий: hostname .—.имя.хоста.или.IP-адрес.сервера.ZooKeeper; port .—.номер.порта.клиента.для.сервера; 48 Глава 2 • Установка Kafka /path .—.необязательный.путь.ZooKeeper,.используемый.в.качестве.нового.кор- невого.( chroot ).пути.кластера.Kafka..Если.он.не.задан,.используется.корневой. путь. Если.заданный.путь. chroot .не.существует,.он.будет.создан.при.запуске.брокера. Зачем выбирать новый корневой путь Выбор нового корневого пути для кластера Kafka обычно считается хорошей практикой. Это дает возможность использовать ансамбль ZooKeeper совместно с другими приложениями, включая другие кластеры Kafka, без каких-либо кон- фликтов. Лучше также задать в конфигурации несколько серверов ZooKeeper (частей одного ансамбля). Благодаря этому брокер Kafka сможет подключиться к другому участнику ансамбля ZooKeeper в случае отказа сервера. log.dirs Kafka.сохраняет.все.сообщения.на.жесткий.диск,.и.хранятся.эти.сегменты.жур- налов.в.каталогах,.задаваемых.в.настройке. log.dirs ..Она.представляет.собой. разделенный.запятыми.список.путей.в.локальной.системе..Если.задано.несколько. путей,.брокер.будет.сохранять.разделы.в.них.по.принципу.наименее.используемых,. с.сохранением.сегментов.журналов.одного.раздела.по.одному.пути..Отметим,.что. брокер.поместит.новый.раздел.в.каталог,.в.котором.в.настоящий.момент.хранит- ся.меньше.всего.разделов,.а.не.используется.меньше.всего.пространства,.так.что. равномерное.распределение.данных.по.разделам.не.гарантируется. num.recovery.threads.per.data.dir Для.обработки.сегментов.журналов.Kafka.использует.настраиваемый.пул.потоков. выполнения..В.настоящий.момент.он.применяется: при.обычном.запуске.—.для.открытия.сегментов.журналов.каждого.из.разделов; запуске.после.сбоя.—.для.проверки.и.усечения.сегментов.журналов.каждого. из.разделов; останове.—.для.аккуратного.закрытия.сегментов.журналов. По.умолчанию.задействуется.только.один.поток.на.каждый.каталог.журналов.. Поскольку.это.происходит.только.при.запуске.и.останове,.имеет.смысл.использо- вать.большее.их.количество,.чтобы.распараллелить.операции..При.восстановлении. после.некорректного.останова.выгоды.от.применения.такого.подхода.могут.до- стичь.нескольких.часов.в.случае.перезапуска.брокера.с.большим.числом.разделов!. Помните,.что.значение.этого.параметра.определяется.из.расчета.на.один.каталог. журналов.из.числа.задаваемых.с.помощью. log.dirs ..То.есть.если.значение.пара- метра. num.recovery.threads.per.data.dir .равно.8,.а.в. log.dirs .указаны.три.пути,. то.общее.число.потоков.—.24. Конфигурация брокера 49 auto.create.topics.enable В.соответствии.с.конфигурацией.Kafka.по.умолчанию.брокер.должен.автоматиче- ски.создавать.тему,.когда: производитель.начинает.писать.в.тему.сообщения; потребитель.начинает.читать.из.темы.сообщения; любой.клиент.запрашивает.метаданные.темы. Во.многих.случаях.такое.поведение.может.оказаться.нежелательным,.особенно. из-за.того,.что.не.существует.возможности.проверить.по.протоколу.Kafka.суще- ствование.темы,.не.вызвав.ее.создания..Если.вы.управляете.созданием.тем.явным. образом,.вручную.или.посредством.системы.инициализации,.то.можете.установить. для.параметра. auto.create.topics.enable .значение. false Настройки тем по умолчанию Конфигурация.сервера.Kafka.задает.множество.настроек.по.умолчанию.для.созда- ваемых.тем..Некоторые.из.этих.параметров,.включая.число.разделов.и.параметры. сохранения.сообщений,.можно.задавать.для.каждой.темы.отдельно.с.помощью.ин- струментов.администратора.(рассматриваются.в.главе.9)..Значения.по.умолчанию. в.конфигурации.сервера.следует.устанавливать.равными.эталонным.значениям,. подходящим.для.большинства.тем.кластера. Индивидуальное переопределение значений для каждой темы В предыдущих версиях Kafka можно было переопределять значения описанных параметров конфигурации брокера отдельно для каждой темы с помощью пара- метров log.retention.hours.per.topic, log.retention.bytes.per.topic и log.segment.bytes. per.topic. Эти параметры более не поддерживаются, и переопределять значения необходимо с помощью инструментов администратора. num.partitions Параметр. num.partitions .определяет,.с.каким.количеством.разделов.создается. новая.тема,.главным.образом.в.том.случае,.когда.включено.автоматическое.созда- ние.тем.(что.является.поведением.по.умолчанию)..Значение.этого.параметра.по. умолчанию.—. 1 ..Имейте.в.виду,.что.количество.разделов.для.темы.можно.лишь. увеличивать,.но.не.уменьшать..Это.значит,.что.если.для.нее.требуется.меньше.раз- делов,.чем.указано.в. num.partitions ,.придется.аккуратно.создать.ее.вручную.(это. обсуждается.в.главе.9). Как.говорилось.в.главе.1,.разделы.представляют.собой.способ.масштабирования. тем.в.кластере.Kafka,.поэтому.важно,.чтобы.их.было.столько,.сколько.нужно.для. уравновешивания.нагрузки.по.сообщениям.в.масштабах.всего.кластера.по.мере. 50 Глава 2 • Установка Kafka добавления.брокеров..Многие.пользователи.предпочитают,.чтобы.число.разделов. было.равно.числу.брокеров.в.кластере.или.кратно.ему..Это.дает.возможность. равномерно.распределять.разделы.по.брокерам,.что.приведет.к.равномерному. распределению.нагрузки.по.сообщениям..Однако.это.не.обязательное.требование,. ведь.и.наличие.нескольких.тем.позволяет.выравнивать.нагрузку. Как выбрать количество разделов Вот несколько факторов, которые следует учитывать при выборе количества разделов. Какой пропускной способности планируется достичь для темы? Например, планируете вы записывать 100 Кбайт/с или 1 Гбайт/с? Какая максимальная пропускная способность ожидается при потреблении сообщений из отдельного раздела? Из каждого раздела всегда будет читать не более чем один потребитель 1 , так что если знать, что потребитель записы- вает данные в базу, которая не способна обрабатывать более 50 Мбайт/с по каждому записывающему в нее потоку, становится очевидным ограничение в 50 Мбайт/с при потреблении данных из раздела. Аналогичным образом можно оценить максимальную пропускную способность из расчета на производитель для одного раздела, но поскольку быстродей- ствие производителей обычно выше, чем потребителей, этот шаг чаще всего можно пропустить. При отправке сообщений разделам по ключам добавление новых разделов может оказаться очень непростой задачей, так что желательно рассчитывать пропускную способность, исходя из планируемого в будущем объема исполь- зования, а не текущего. Обдумайте число разделов, размещаемых на каждом из брокеров, а также доступные каждому брокеру объем дискового пространства и полосу про- пускания сети. Старайтесь избегать завышенных оценок, ведь любой раздел расходует опе- ративную память и другие ресурсы на брокере и увеличивает время на выбор ведущего узла. С учетом всего этого ясно, что разделов должно быть много, но не слишком много. Если у вас есть предварительные оценки целевой пропускной способности для темы и ожидаемой пропускной способности потребителей, можно получить требуемое число разделов путем деления целевой пропускной способности на ожидаемую пропускную способность потребителей. Так что если необходимо читать из темы 1 Гбайт/с и записывать столько же и мы знаем, что каждый по- требитель способен обрабатывать лишь 50 Мбайт/с, то нам нужно как минимум 20 разделов. Таким образом, из темы будут читать 20 потребителей, что в сумме даст 1 Гбайт/с. Если же такой подробной информации у вас нет, то, по нашему опыту, ограни- чение размеров разделов на диске до 6 Гбайт сохраняемой информации в день часто дает удовлетворительные результаты. 1. Имеется.в.виду,.что.раздел.в.целом.должен.быть.прочитан.одним.потребителем.или. группой.потребителей..—.Примеч. пер. Конфигурация брокера 51 log.retention.ms Чаще.всего.продолжительность.хранения.сообщений.в.Kafka.ограничивается. по.времени..Значение.по.умолчанию.указано.в.файле.конфигурации.с.помощью. параметра. log.retention.hours .и.равно.168.часам,.или.1.неделе..Однако.можно. использовать.и.два.других.параметра.—. log.retention.minutes .и. log.retention.ms Все.эти.три.параметра.определяют.одно.и.то.же.—.промежуток.времени,.по.исте- чении.которого.сообщения.удаляются..Но.рекомендуется.использовать.параметр. log.retention.ms ,.ведь.в.случае.указания.нескольких.параметров.приоритет.при- надлежит.наименьшей.единице.измерения,.так.что.всегда.будет.использоваться. значение. log.retention.ms Хранение информации в течение заданного промежутка времени и время последнего изменения Хранение информации в течение заданного промежутка времени осуществля- ется путем анализа времени последнего изменения (mtime) каждого из файлов сегментов журналов на диске. При обычных обстоятельствах оно соответствует времени закрытия сегмента журнала и отражает метку даты/времени последнего сообщения в файле. Однако при использовании инструментов администратора для переноса разделов между брокерами это время оказывается неточным и приводит к слишком длительному хранению информации для этих разделов. Более подробно мы обсудим этот вопрос в главе 9, когда будем рассматривать переносы разделов. log.retention.bytes Еще.один.способ.ограничения.срока.действия.сообщений.—.на.основе.общего.раз- мера.(в.байтах).сохраняемых.сообщений..Значение.задается.с.помощью.параметра. log.retention.bytes .и.применяется.пораздельно..Это.значит,.что.в.случае.темы.из. восьми.разделов.и.равного.1.Гбайт.значения. log.retention.bytes .максимальный. объем.сохраняемых.для.этой.темы.данных.будет.8.Гбайт..Отметим,.что.объем.со- хранения.зависит.от.отдельных.разделов,.а.не.от.темы..Это.значит,.что.в.случае. увеличения.числа.разделов.для.темы.максимальный.объем.сохраняемых.при.ис- пользовании. log.retention.bytes .данных.также.возрастет. Настройка сохранения по размеру и времени Если задать значения параметров log.retention.bytes и log.retention.ms (или другого параметра ограничения времени хранения данных), сообщения будут удаляться по достижении любого из этих пределов. Например, если значение log.retention. ms равно 86 400 000 (1 день), а log.retention.bytes — 1 000 000 000 (1 Гбайт), вполне могут удаляться сообщения младше 1 дня, если общий объем сообщений за день превысил 1 Гбайт. И наоборот, сообщения могут быть удалены через день, даже если общий объем сообщений раздела меньше 1 Гбайт. 52 Глава 2 • Установка Kafka log.segment.bytes Упомянутые.настройки.сохранения.журналов.касаются.сегментов.журналов,.а.не. отдельных.сообщений..По.мере.генерации.сообщений.брокером.Kafka.они.добавля- ются.в.конец.текущего.сегмента.журнала.соответствующего.раздела..По.достижении. сегментом.журнала.размера,.задаваемого.параметром. log.segment.bytes .и.равного. по.умолчанию.1.Гбайт,.этот.сегмент.закрывается.и.открывается.новый..После. закрытия.сегмент.журнала.можно.выводить.из.обращения..Чем.меньше.размер. сегментов.журнала,.тем.чаще.приходится.закрывать.файлы.и.создавать.новые,.что. снижает.общую.эффективность.операций.записи.на.диск. Подбор.размера.сегментов.журнала.важен.в.случае,.когда.темы.отличаются.низкой. частотой.генерации.сообщений..Например,.если.в.тему.поступает.лишь.100.Мбайт. сообщений.в.день,.а.для.параметра. log.segment.bytes .установлено.значение.по. умолчанию,.для.заполнения.одного.сегмента.потребуется.10.дней..А.поскольку. сообщения.нельзя.объявить.недействительными.до.тех.пор,.пока.сегмент.журна- ла.не.закрыт,.то.при.значении.604.800.000.(1.неделя).параметра. log.retention. ms .к.моменту.вывода.из.обращения.закрытого.сегмента.журнала.могут.скопиться. сообщения.за.17.дней..Это.происходит.потому,.что.при.закрытии.сегмента.с.нако- пившимися.за.10.дней.сообщениями.его.приходится.хранить.еще.7.дней,.прежде. чем.можно.будет.вывести.из.обращения.в.соответствии.с.принятыми.временными. правилами,.поскольку.сегмент.нельзя.удалить.до.того,.как.окончится.срок.действия. последнего.сообщения.в.нем. |