KAFKA Flashcards
Что такое распределённое хранилище?
Система, работающая на нескольких машинах, каждая машина - часть хранилища. Пользователь видит это как одно целое.
Что такое горизонтальное и вертикальное масштабирование?
горизонтальное - Увеличение ресурсов за счёт добавления в систему новых машин.
вертикальное- увеличение мощности машины (cpu, ram, …). Имеет предел и даунтайм
эти 2 вида можно комбинировать.
Что такое отказоустойчивость?
Свойство, позволяющее системе не иметь единую точку отказа. Это означает, что система способна продолжать работу, даже если один или несколько ее компонентов перестали функционировать.
Так же называется резилиентность
Для достижения отказоустойчивости системы, ее компоненты могут быть дублированы или распределены на несколько узлов, которые могут работать независимо друг от друга. Если один узел перестает работать, другие узлы могут продолжить обслуживание клиентов.
Что такое лог?
Упорядоченная по времени append-only последовательность записей (структура данных).
Может принимать данные, но содержащиеся данные неизменяемы.
Важным свойством журналов является их неизменяемость, то есть записи, которые уже были добавлены в журнал, не могут быть изменены или удалены. Это обеспечивает надежность и целостность данных в журнале.
Что такое Apache Kafka?
Распределённое отказоустойчивое горизонтально масштабируемое хранилище, основной структурой данных которого является append-only log. Она поддерживает потоковую обработку данных и имеет экосистему коннектооров для интеграции с БД и другими хранилищами.
Может выступать как:
- Брокер событий или система пайплайнов с помощью которой элементы распределенной системы общаются между собой.
- Система коммуникаций между сервисами, если она грамотно выстроена, позволяет компонентам ставить друг другу задачи, сообщать об изменениях в системе и уведомлять заинтересованные части логики приложения о своих состояниях.
https://mcs.mail.ru/blog/apache-kafka-chto-eto-i-kak-rabotaet
Как работает кафка?
В упрощенном виде работа Kafka Apache выглядит следующим образом:
- Приложение-продюсер создает сообщение и отправляет его на узел Kafka.
- Брокер сохраняет сообщение в топике, на который подписаны приложения-потребители.
- Потребитель при необходимости делает запрос в топик и получает из него нужные данные.
Принимая сообщение от продюсера, узел реплицирует (копирует) его, а копии сохраняет на разных узлах. При этом один из брокеров назначается лидером секции, через него потребители будут обращаться к записям. Другие брокеры остаются ведомыми, их главная задача — обеспечить сохранность сообщения (его копий) даже при выходе одного или нескольких узлов из строя.
Процесс работы Apache Kafka можно разбить на несколько шагов:
- Создание топика: производитель создает топик в Kafka, который будет использоваться для передачи сообщений.
- Запись сообщений: производитель записывает сообщения в топик. Сообщения состоят из ключа и значения.
- Хранение сообщений: сообщения сохраняются в журнале (log), который является упорядоченной по времени структурой данных.
- Чтение сообщений: подписчик читает сообщения из топика. Подписчик может читать сообщения в режиме реального времени или задать временной интервал, за который нужно прочитать сообщения.
- Обработка сообщений: подписчик обрабатывает сообщения, которые получил из топика.
Какие задачи решает Kafka
Apache Kafka - это распределенная система обмена сообщениями, которая используется для обработки потоков данных в реальном времени. Kafka позволяет эффективно передавать сообщения от одного приложения к другому, а также сохранять сообщения для последующей обработки.
Основные задачи, которые решает Kafka:
- Передача сообщений: Kafka обеспечивает быструю и надежную передачу сообщений от одного приложения к другому.
- Хранение сообщений: Kafka сохраняет сообщения в хранилище данных, которое может быть использовано для повторной обработки или анализа потоков данных.
- Распределение сообщений: Kafka позволяет масштабировать приложения путем распределения сообщений между несколькими узлами кластера Kafka.
- Обработка потоков данных: Kafka поддерживает обработку потоков данных в режиме реального времени, что позволяет обрабатывать данные в непрерывном режиме и быстро реагировать на изменения в данных.
- Интеграция с другими системами: Kafka может использоваться для интеграции с другими системами, такими как базы данных, хранилища данных и системы обработки данных в реальном времени.
Кто такие producer & consumer?
продюсер (producer) — приложение или процесс, генерирующий и посылающий данные (публикующий сообщение);
потребитель (consumer)— приложение или процесс, который принимает сгенерированное продюсером сообщение;
Потребитель знает из какого брокера читать сообщение.
сообщение — пакет данных, необходимый для совершения какой-либо операции (например, авторизации, оформления покупки или подписки);
“acks” в Kafka Producer
“acks” в Kafka Producer относится к параметру конфигурации, который определяет, сколько подтверждений (acks) брокер Kafka должен отправить обратно Producer после получения сообщения.
Параметр “acks” может принимать одно из трех значений:
- “acks=0”: Producer не ждет никаких подтверждений от брокера и считает сообщение успешно отправленным, как только отправит его в буфер отправки. Это самый быстрый метод, но также самый ненадежный, так как сообщение может потеряться, если брокер Kafka не сможет принять его.
- “acks=1”: Producer ожидает подтверждение от лидера (leader) брокера, который получил сообщение. Если лидер подтверждает получение сообщения, Producer получает подтверждение. Это более надежный метод, чем “acks=0”, но сообщение все еще может быть потеряно, если лидер перестает работать до того, как сообщение будет реплицировано на другие брокеры.
- “acks=all” или “acks=-1”: Producer ждет подтверждения от всех реплик (replicas) брокеров, включая лидера. Это наиболее надежный метод, потому что сообщение не будет потеряно, если какой-либо брокер перестанет работать. Однако этот метод является наиболее медленным, так как Producer должен ждать, пока все реплики получат сообщение.
Конфигурация “acks” влияет на производительность и надежность Kafka Producer. Выбор правильного значения для “acks” зависит от требований к надежности и производительности вашей системы.
Что такое retention?
задает условия хранения данных:
retention.ms - время хранения
retention.bytes - задаёт размер партиции.
NB: срок хранения не влияет на производительность системы.
Что такое сообщение в кафке?
Key + Value + Timestamp + Headers (metainfo).
Если ключ = null, то партиции используется поочередно(round robin)
Месаджи с одинаковыми ключами гарантированно пишутся в одну партицию
Key используется для сохранения порядка в очереди сообщений для одной бизнес сущности.
Что такое топик?
топик (тема) — виртуальное хранилище сообщений (журнал записей) одинакового или похожего содержания, из которого приложение-потребитель извлекает необходимую ему информацию.
топик это логическая единица разделения данных.(топик Orders, топик Countries и т.д.)
топик это логическое представление, а партиция физическая
./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic my_topic
если мы начинаем писать в топик, который ранее не был создан, кафка создаст его самостоятельно.
Объяснение аргументов команды:
- –create: указывает, что мы хотим создать топик
- –bootstrap-server: указывает адрес и порт брокера Kafka, который мы хотим использовать для создания топика
- –replication-factor: указывает, сколько копий каждой партиции топика должно храниться на разных брокерах. В этом примере мы указываем значение 1, что означает, что каждая партиция будет иметь только одну копию
- –partitions: указывает, сколько партиций мы хотим создать в топике. В этом примере мы указываем значение 1, что означает, что у нас будет только одна партиция
- –topic: указывает имя топика, который мы хотим создать. В этом примере мы называем наш топик my_topic.
Что такое партиция?
Распределенный отказоустойчивый log.
Лог это состояние системы в момент времени
Каждая партиция это по факту мини БД
Сообщения хранятся в одной из партиций топика.
Каждый топик состоит из 1 и более партиций, распределенных между брокерами внутри одного кластера, что позволяет клиентам писать и читать месаджи в / с несколько брокером одновременно.
Партиции - основной инструмент масштабирования кафки: если консумеры не справляются или нужно распределить нагрузку - добавляем партиции в топик.
Можно писать параллельно в несколько партиций.(партиция - единица паралеллизации на запись)
Теоретический лимит партиций на кластер - 200000.
Желательно иметь по 3-4 партиции на консюмера
партиции нумеруются с нуля.
в топики может быть несколько партиций. запись в партици производится с конца.
Лидер партиции в Kafka - это узел, который отвечает за запись новых сообщений в данную партицию и координирует чтение сообщений на этой партиции. Фолловеры - это узлы, которые реплицируют данные из лидера и обеспечивают отказоустойчивость Kafka. Если лидер выходит из строя, один из фолловеров автоматически становится новым лидером и продолжает работу с партицией.
Лидеры и фолловеры распологаются по разным брокерам.
Что таое auto.offset.reset?
определяет как должен вести себя консумер читая из партиции, в которой нет начального оффсета.
если мы на лету добавляем партицию в проде, надо сделать auto.offset.reset=earlyest, тогда можно будет прочитать все данные.
https://medium.com/lydtech-consulting/kafka-consumer-auto-offset-reset-d3962bad2665
Что такое Consumer Оффсет?
Consumer Offset (смещение потребителя) в Kafka - это позиция в логе, указывающая, до какого сообщения потребитель уже прочитал. Каждый потребитель (consumer) в Kafka имеет свой собственный оффсет для каждой темы и партиции (partition).
Consumer должен коммитить свой offset
если Consumer падает, то после этого он может продолжить с того сообщения на котором упал, зная offset
Consumer offset позволяет потребителям продолжать обработку сообщений с того места, где они остановились при предыдущем запуске, а не начинать обработку сообщений заново. Это важно для сохранения целостности данных и избежания обработки дубликатов сообщений.
при попадании сообщения в партицию оно ставится в голову и ему назначается офсет: уникальный монотонно возрастающий 64-bit unsigned int