├── 1.Introduction ├── 1.presentation.pdf └── README.md ├── 2.Basic technology fundamentals ├── 2.presentation.pdf └── README.md ├── 3.Installing Kafka and working with a cluster from one broker ├── 3.presentation.pdf └── README.md └── README.md /1.Introduction/1.presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slurm-personal/kafka-free/52c547d87a8561cdb7d9b0f63cefeb511fdef63b/1.Introduction/1.presentation.pdf -------------------------------------------------------------------------------- /1.Introduction/README.md: -------------------------------------------------------------------------------- 1 | # Инструкции к бесплатной части курса Kafka 2 | 3 | ## 1.Introduction 4 | 5 | **Что такое Apache Kafka?** 6 | 7 | **Apache Kafka** – это распределенное, отказоустойчивое, горизонтально масштабируемое хранилище, основной структурой данных в котором является append-only лог и которое: 8 | 9 | * поддерживает потоковую обработку данных; 10 | * имеет развитую экосистему коннекторов для интеграции с базами данных и другими хранилищами. 11 | 12 | **Зачем создали Apache Kafka?** 13 | 14 | Kafka разработали более 10 лет назад в LinkedIn из-за потребности компании в обработке огромных потоков данных между различными частями их внутренней платформы. Оценив существующие на тот момент решения, инженеры компании решили разработать свою технологию. Кстати, название технологии дал её автор – Jay Kreps, в честь любимого писателя Франца Кафки. 15 | 16 | **Почему выбирают Apache Kafka?** 17 | 18 | * отлично подходит для хранения и обработки в реальном времени огромных объемов данных; 19 | * обладает возможностью горизонтально масштабировать продюсеров, консьюмеров и брокеров; 20 | * развитая экосистема Kafka Connect позволяет связывать практически любые источники данных с Kafka в считанные минуты, а Kafka Streams дает возможность проводить обработку этих данных в реальном времени. 21 | 22 | **Как используют Apache Kafka?** 23 | 24 | Kafka используется, когда речь заходит об обработке больших объемов данных в реальном времени, а также производительности и сохранности данных. Примеры использования технологии: 25 | 26 | * брокер сообщений для межсервисного взаимодействия; 27 | * обработка кликстрим действий пользователей; 28 | * система очередей (имейте в виду, что Кафка поддерживает только семантику топиков); 29 | * журналирование; 30 | * сбор метрик; 31 | * commit log; 32 | * центральное хранилище информации. 33 | 34 | **Основные тезисы:** 35 | 36 | * Apache Kafka – быстрая, надежная технология для обработки и хранения больших потоков данных с богатой экосистемой и активным комьюнити; 37 | * Kafka не заточена под единственный вариант использования и подходит под разнообразные задачи; 38 | * Kafka - лидирующая технология в своей отрасли, которую уже взяли “на вооружение” более 80% компаний из списка Fortune 100. 39 | * Количество компаний, использующих Kafka во всем мире, продолжает расти и им нужны специалисты. 40 | 41 | **Базовый курс:** 42 | 43 | Авторы расскажут откуда произошла технология и в чем ее преимущество перед конкурентами. А также покажут как осуществлять первичную настройку и простые действия на начальном этапе. Все уроки базового курса в плейлисте: https://www.youtube.com/playlist?list=PL8D2P0ruohOAR7DAkEjhOqlQreg9rxBMu 44 | 45 | **Продвинутый курс:** 46 | 47 | Авторы на практике научат работать с Apache Kafka — платформой для передачи и обработки событий в реальном времени. Настраивать распределенный отказоустойчивый кластер, отслеживать метрики, равномерно распределять нагрузку. 48 | 49 | **Посмотреть программу продвинутого практического курса: https://slurm.club/31urcgo** 50 | -------------------------------------------------------------------------------- /2.Basic technology fundamentals/2.presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slurm-personal/kafka-free/52c547d87a8561cdb7d9b0f63cefeb511fdef63b/2.Basic technology fundamentals/2.presentation.pdf -------------------------------------------------------------------------------- /2.Basic technology fundamentals/README.md: -------------------------------------------------------------------------------- 1 | # Инструкции к бесплатной части курса Kafka 2 | 3 | ## 2.Basic technology fundamentals 4 | 5 | **В чем отличие Kafka в сравнении с сервисами очередей?** 6 | 7 | Как и сервисы очередей, Kafka условно состоит из трех базовых компонентов: сервера (брокера), продюсера и консьюмера. Главное отличие Kafka от сервисов очередей (например RabbitMQ или Amazon SQS) заключается в том, как сообщения хранятся на брокере, а также потребляются консьюмерами: 8 | 9 | * сообщения в Kafka не удаляются по мере их обработки консьюмерами; 10 | * одни и те же сообщения могут быть обработаны сколько угодно раз, в том числе несколькими сервисами одновременно. 11 | 12 | **Внутренняя структура данных Kafka состоит из:** 13 | 14 | * **Event** (сообщение), который включает в себя: ключ (key), значение (value), timestamp и опциональный набор метаданных (headers); 15 | * **Topics** (топики), в которых организованы и хранятся сообщения. В свою очередь каждый Topic состоит из одной или более партиций; 16 | * **Partitions** (партиции) - это распределенный отказоустойчивый лог (**Log**). Сообщения с одинаковыми ключами записываются в одну и ту же партицию. 17 | * У каждой партиции есть один брокер лидер - **Leader** (принимает сообщения от **Producer** и в общем случае отдает сообщения консьюмеру),  18 | * Фолловеры (**Follower**) являются брокерами, которые хранят реплику всех данных партиции и осуществляют запросы лидеру. 19 | 20 | ![IMAGE_DESCRIPTION](https://cdn.slurm.io/courses/kafka-online/data_structure.png) 21 | 22 | **Consumer Groups:** 23 | 24 | * партиции внутри одной группы назначаются консьюмерам уникально; 25 | * партиции — это основной инструмент масштабирования; 26 | * если консьюмеры не справляются с объемом данных, то необходимо добавить новые партиции в топик и добавить консюмеров в группу; 27 | * важно помнить о гарантии очередности данных, а также то, что партиции невозможно удалить после их создания - придется удалять весь топик целиком. 28 | 29 | ![IMAGE_DESCRIPTION](https://cdn.slurm.io/courses/kafka-online/consumer_groups.png) 30 | 31 | **Что такое Apache Zookeeper?** 32 | 33 | Zookeeper - один из важных компонентов кластера Kafka, который выполняет роль консистентного хранилища метаданных. В настоящее время Zookeeper является критической зависимостью для Kafka, поскольку именно он способен сказать, живы ли брокеры, какой из брокеров является контроллером, а также в каком состоянии находятся лидеры партиций и их реплики. Важно помнить, что падение Zookeeper равнозначно падению всего кластера Kafka! Поэтому эта система также нуждается в поддержке и обновлении. Но, к счастью, нагрузка на Zookeeper при нормальной работе кластера является минимальной. 34 | 35 | **Базовый курс:** 36 | 37 | Авторы расскажут откуда произошла технология и в чем ее преимущество перед конкурентами. А также покажут как осуществлять первичную настройку и простые действия на начальном этапе. Все уроки базового курса в плейлисте: https://www.youtube.com/playlist?list=PL8D2P0ruohOAR7DAkEjhOqlQreg9rxBMu 38 | 39 | **Продвинутый курс:** 40 | 41 | Авторы на практике научат работать с Apache Kafka — платформой для передачи и обработки событий в реальном времени. Настраивать распределенный отказоустойчивый кластер, отслеживать метрики, равномерно распределять нагрузку. 42 | 43 | **Посмотреть программу продвинутого практического курса: https://slurm.club/31urcgo** 44 | -------------------------------------------------------------------------------- /3.Installing Kafka and working with a cluster from one broker/3.presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slurm-personal/kafka-free/52c547d87a8561cdb7d9b0f63cefeb511fdef63b/3.Installing Kafka and working with a cluster from one broker/3.presentation.pdf -------------------------------------------------------------------------------- /3.Installing Kafka and working with a cluster from one broker/README.md: -------------------------------------------------------------------------------- 1 | # Инструкции к бесплатной части курса Kafka 2 | 3 | ## 3.Installing Kafka and working with a cluster from one broker 4 | 5 | ### Введение 6 | 7 | **Практическая работа** 8 | 9 | В этом уроке мы перейдем к практике и получим фундаментальные знания, необходимые для работы с более высокоуровневым функционалом в дальнейшем. 10 | 11 | Мы развернём на нем Кафку в самом простом её варианте — с одним брокером и одной нодой зукипера. 12 | 13 | Запишем и прочитаем сообщения, посмотрим в конфиги и увидим как данные хранятся на диске. 14 | 15 | Мы специально не будем пользоваться сторонними инструментами и Docker, а только ванильной сборкой, которая доступна на официальном сайте. 16 | 17 | Итак, приступим. 18 | 19 | **Требования к стендам** 20 | 21 | Мы вплотную подобрались к практической части, которая позволит вам поработать с Kafka собственноручно и на практике закрепить понимание вами основных концепций и принципов работы этого ПО. 22 | 23 | Однако, в отличие от полного курса, мы не можем предоставить вам стенд для выполнения задания. Но требования к этому стенду совсем несложные, поэтому мы предлагаем вам системные требования и небольшую инструкцию, чтобы любой студент на курсе смог пройти практику. 24 | 25 | **Требования к системным ресурсам:** 26 | 27 | Как минимум 1 ядро CPU, 1 Gb RAM, 1 Gb disk.  28 | 29 | Однако современные ОС, как правило, требуют больше ресурсов просто для своего запуска и нормальной работы, поэтому скорее всего ресурсов у вас уже достаточно. 30 | 31 | **Требования к ПО:** 32 | 33 | 64-битная ОС, Java Runtime Environment (JRE) 8 или 11. 34 | 35 | 1. Если у вас ОС Linux или MacOS (современных версий - не старше 5 лет), вы можете установить в систему пакет ``jre-headless`` (либо ``openjdk-11-jre-headless``, названия пакетов у разных дистрибутивов могут отличаться) и делать практику в системном терминале. Других пакетов не понадобится, будут использоваться простые команды типа wget, tar, dd, встроенные в bash и т.д. 36 | 37 | Проверить, что JRE установлена и нужной версии, можно командой: 38 | 39 | ``java –version`` 40 | 41 | Получим примерно такой ответ: 42 | 43 | ``` 44 | openjdk 11.0.10 2021-01-19 LTS 45 | OpenJDK Runtime Environment Zulu11.45+27-CA (build 11.0.10+9-LTS) 46 | OpenJDK 64-Bit Server VM Zulu11.45+27-CA (build 11.0.10+9-LTS, mixed mode) 47 | ``` 48 | 49 | 2. Если у вас относительно новый ПК и установлен Windows 10 – вы можете установить себе **WSL** (Windows Subsystem for Linux), таким образом вы получите терминал с почти полнофункциональной ОС Linux. 50 | 51 | Вот здесь можно почитать, как это делается: https://docs.microsoft.com/ru-ru/windows/wsl/install-win10 52 | 53 | 54 | Далее можно перейти к пункту 1. 55 | 56 | 3. В Windows 8/10 (и во многих других ОС, в том числе и Linux или MacOS), вы можете установить простой гипервизор **Virtualbox** (https://www.virtualbox.org/) и запустить образ с Linux. 57 | 58 | Образы можно найти например вот тут: https://www.linuxvmimages.com/ 59 | 60 | 61 | Спикер использовал для записи **CentOS 7**, вот ссылка сразу на подходящий образ: https://sourceforge.net/projects/linuxvmimages/files/VirtualBox/C/7/CentOS_7.8.2003_VBM.zip/download  62 | 63 | Далее – смотрите пункт 1, потребуется доустановить пакет jre-headless и можно приступать к заданию. 64 | 65 | 4. Если у вас есть опыт работы с облачными провайдерами или другими гипервизорами, вы уже знаете что делать – создайте виртуальную машину с Linux и установите JRE 8 или 11. 66 | 67 | К сожалению, техническую поддержку по стендам бесплатной части курса по Apache Kafka мы не оказываем. Однако если вы хотите успешно освоить навыки и работать с брокером сообщений Apache Kafka, скорее всего нужный уровень знаний Linux у вас уже есть. 68 | 69 | ### Запуск Kafka 70 | 71 | Запуск кластера из одной ноды 72 | 73 | Скачиваем архив с кафкой: 74 | 75 | ``` 76 | wget https://archive.apache.org/dist/kafka/2.7.0/kafka_2.13-2.7.0.tgz 77 | tar -xzf kafka_2.13-2.7.0.tgz 78 | cd kafka_2.13-2.7.0 79 | ``` 80 | 81 | Первым делом мы запускаем Zookeeper. Как мы уже обсуждали, Кафка пользуется зукипером для хранения метаданных, а также для координации своей работы (выбора лидеров партиций и контроллера). 82 | 83 | ``` 84 | ./bin/zookeeper-server-start.sh config/zookeeper.properties 85 | ``` 86 | 87 | Запускаем брокер Кафки 88 | 89 | ``` 90 | ./bin/kafka-server-start.sh config/server.properties 91 | ``` 92 | 93 | ### Запись и чтение сообщений 94 | 95 | Создаем топик с регистрациями 96 | ``` 97 | ./bin/kafka-topics.sh --create --topic registrations --bootstrap-server localhost:9092 98 | ``` 99 | Посмотрим на его конфигурацию 100 | ``` 101 | ./bin/kafka-topics.sh --describe --topic registrations --bootstrap-server localhost:9092 102 | ``` 103 | Давайте запишем первое сообщение 104 | ``` 105 | ./bin/kafka-console-producer.sh --topic registrations --bootstrap-server localhost:9092 106 | >Hello world! 107 | >Hello Slurm! 108 | ``` 109 | Попробуем его прочитать 110 | ``` 111 | ./bin/kafka-console-consumer.sh --topic registrations --bootstrap-server localhost:9092 112 | ``` 113 | И… ничего не происходит! 114 | 115 | В эту ситуацию попадают многие люди, впервые использующие кафку. Все дело в том, что консьюмер Kafka по умолчанию начинает читать данные с конца топика (см. настройку ```auto.offset.reset```). Для того чтобы прочитать данные с начала, мы должны переопределить эту конфигу. 116 | ``` 117 | ./bin/kafka-console-consumer.sh --topic registrations --bootstrap-server localhost:9092 --consumer-property auto.offset.reset=earliest 118 | ``` 119 | Или можно сказать “```--from-beginning```”. Ура, мы произвели запись и чтение! Запишем еще одно сообщение — увидим, что оно появляется в консюмере. Обратим внимание на лог и увидим, что каждый запуск консольного консюмера создает новую группу. 120 | 121 | Давайте вместо этого зададим свою: 122 | ``` 123 | ./bin/kafka-console-consumer.sh --topic registrations --group slurm --bootstrap-server localhost:9092 --consumer-property auto.offset.reset=earliest 124 | ``` 125 | Видим сообщения, все ок, а теперь давайте перезапустим... Снова ничего! Вспомним из прошлой лекции, что консюмер группы в Кафке могут коммиттить свои оффсеты для топик-партиции, чтобы при перезапуске продолжать чтение с последней запомненной позиции. Именно это поведение мы и видим. Давайте проверим 126 | ``` 127 | ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group slurm --describe 128 | ``` 129 | А теперь сбросим позицию обратно на начало 130 | ``` 131 | ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group slurm --to-earliest --reset-offsets --execute --topic registrations 132 | ``` 133 | При новом запуске консюмера снова давайте отключим автоматический коммит оффсетов 134 | ``` 135 | ./bin/kafka-console-consumer.sh --topic registrations --bootstrap-server localhost:9092 --group slurm --consumer-property auto.offset.reset=earliest --consumer-property enable.auto.commit=false 136 | ``` 137 | Если запустим консюмера снова, то увидим, что сообщения читаются. Этим мы можем подтвердить, что оффсеты не коммитятся (+ оставим запущенным консюмера, чтобы увидеть идентификатор и адрес). 138 | 139 | ### Topic Retention Часть 1 140 | 141 | **Очистка топика** 142 | 143 | Итак, мы успешно записали и прочитали сообщения, давайте посмотрим на механизм ретеншена 144 | ``` 145 | ./bin/kafka-topics.sh --describe --topic registrations --bootstrap-server localhost:9092 146 | ``` 147 | По умолчанию Кафка проверяет, нужно ли удалить данные по ретеншену каждые 5 минут. Давайте сделаем этот интервал меньше — каждую секунду. 148 | 149 | Остановим брокер Кафки и открываем файл на редактирование: 150 | ``` 151 | vi config/server.properties 152 | ``` 153 | И выставляем там нужное значение: 154 | ``` 155 | log.retention.check.interval.ms=1000 156 | ``` 157 | После этого запускаем снова брокер. 158 | 159 | Давайте теперь скажем Кафке, что мы хотим удалять сообщения после одной минуты: 160 | ``` 161 | ./bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name registrations --alter --add-config retention.ms=60000 162 | ``` 163 | Запустив заново консюмера мы увидим, что сообщения действительно удалились. В логе видим “Found deletable segments with base offsets”. 164 | 165 | Давайте поподробнее разберем этот момент. Повторим эксперимент, слегка изменив настройки.  166 | 167 | Скажем Кафке удалять данные после 10 секунд: 168 | ``` 169 | ./bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name registrations --alter --add-config retention.ms=10000 170 | ``` 171 | А теперь запустим продюсера писать сообщения в цикле. 172 | 173 | В одном терминале запустим вот такую конструкцию: 174 | ``` 175 | touch /tmp/data && tail -f -n0 /tmp/data | ./bin/kafka-console-producer.sh --topic registrations --bootstrap-server=localhost:9092 --sync 176 | ``` 177 | А во втором терминале - вот такую: 178 | ``` 179 | for i in $(seq 1 3600); do echo "test${i}" >> /tmp/data; sleep 1; done 180 | ``` 181 | Читая сообщения спустя минуту, мы по-прежнему видим старые сообщения! 182 | ``` 183 | ./bin/kafka-console-consumer.sh --topic registrations --bootstrap-server localhost:9092 --consumer-property auto.offset.reset=earliest 184 | ``` 185 | Для того чтобы понять, что происходит, мы должны разобраться во внутренней структуре данных партиции. 186 | 187 | ### Структура Партиции 188 | 189 | Полный перечень настроек здесь: 190 | https://kafka.apache.org/documentation/#configuration 191 | 192 | ### Topic Retention Часть 2 193 | 194 | Очистка топика (продолжение) 195 | 196 | Заглянув в папку с данными, видим активный сегмент (а также старые сегменты, помеченные как “deleted”). 197 | ``` 198 | ls -la /tmp/kafka-logs/registrations-0 199 | ``` 200 | Выставим более частую ротацию нашему топику, раз в 10 секунд: 201 | ``` 202 | ./bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name registrations --alter --add-config segment.ms=10000 203 | ``` 204 | Теперь мы видим ротацию сегмента в логе. 205 | 206 | И, через некоторое время, увидим что данные удалились - благодаря удалению ротированного сегмента. 207 | 208 | ### Log Compaction 209 | 210 | Живой пример такого приложения: Confluent Schema Registry 211 | https://github.com/confluentinc/schema-registry 212 | 213 | ### ZooKeeper 214 | 215 | Информация о кластере Kafka в ZooKeeper 216 | Под конец урока давайте заглянем в ZooKeeper, и посмотрим какую информацию он хранит. 217 | 218 | Откроем консоль zookeeper: 219 | ``` 220 | ./bin/zookeeper-shell.sh localhost:2181 221 | ``` 222 | И уже там можем посмотреть, что у нас есть: 223 | ``` 224 | ls / 225 | get /controller 226 | get /brokers/topics/registrations/partitions/0/state 227 | stat /brokers/ids/0 228 | ``` 229 | 230 | Итак, вы стали на шаг ближе к тому, чтобы стать опытным пользователем Apache Kafka, поздравляем! :) 231 | Однако, если вы пройдете наш продвинутый курс по Apache Kafka, то сможете стать магистром ордена брокеров сообщений! 232 | 233 | Авторы на практике научат работать с Apache Kafka — платформой для передачи и обработки событий в реальном времени. Настраивать распределенный отказоустойчивый кластер, отслеживать метрики, равномерно распределять нагрузку. 234 | 235 | **Посмотреть программу продвинутого практического курса: https://slurm.club/31urcgo** 236 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | В репозитории представлены дополнительные материалы открытого базового курса по Apache Kafka, практические задания к третьему уроку. 2 | 3 | В базовом курсе авторы расскажут, откуда произошла технология и в чем ее преимущество перед конкурентами. А также покажем как осуществлять первичную настройку и простые действия на начальном этапе. Все уроки базового курса в плейлисте: https://www.youtube.com/playlist?list=PL8D2P0ruohOAR7DAkEjhOqlQreg9rxBMu 4 | 5 | В продвинутом курсе авторы на практике научат работать с Apache Kafka — платформой для передачи и обработки событий в реальном времени. Настраивать распределенный отказоустойчивый кластер, отслеживать метрики, равномерно распределять нагрузку. 6 | 7 | Посмотреть программу продвинутого практического курса: https://slurm.club/31urcgo 8 | --------------------------------------------------------------------------------