Kafka Flashcards
Что такое распределённое хранилище?
Система, работающая на нескольких машинах, каждая машина - часть хранилища. Пользователь видит это как одно целое.
Что такое горизонтальное и вертикальное масштабирование?
горизонтальное - Увеличение ресурсов засчёт добавления в систему новых машин.
вертикальное- увеличение мощности машины (cpu, ram, …). Имеет предел и даунтайм
эти 2 вида можно комбинировать.
Что такое отказоустойчивость?
Свойство, позволяющее системе не иметь единую точку отказа (если машина вышла из строя система продолжит работать).
Что такое лог?
Упорядоченная по времени append-only структура данных.
append-only: Может принимать данные, но содержащиеся данные неизменяемы.
Что такое Apache Kafka?
Распределённое отказоустойчивое горизонтально масштабируемое хранилище логов.
Она поддерживает потоковую обработку данных и имеет экосистему коннектооров для интеграции с БД и другими хранилищами.
Может выступать как:
- Брокер событий или система пайплайнов с помощью которой элементы распределенной системы общаются между собой.
- Система коммуникаций между сервисами, если она грамотно выстроена, позволяет компонентам ставить друг другу задачи, сообщать об изменениях в системе и уведомлять заинтересованные части логики приложения о своих состояниях.
https://mcs.mail.ru/blog/apache-kafka-chto-eto-i-kak-rabotaet
Как работает кафка?
В упрощенном виде работа Kafka Apache выглядит следующим образом:
- Приложение-продюсер создает сообщение и отправляет его на узел Kafka.
- Брокер сохраняет сообщение в топике, на который подписаны приложения-потребители.
- Потребитель при необходимости делает запрос в топик и получает из него нужные данные.
Кто такие producer & consumer?
продюсер (producer) — приложение или процесс, генерирующий и посылающий данные (публикующий сообщение);
потребитель (consumer) — приложение или процесс, который принимает сгенерированное продюсером сообщение;
сообщение — пакет данных, необходимый для совершения какой-либо операции (например, авторизации, оформления покупки или подписки);
Что такое retention?
задает условия хранения данных:
retention.ms - время хранения
retention.bytes - задаёт размер партиции.
NB: срок хранения не влияет на производительность системы.
Что такое сообщение в кафке?
Key + Value + Timestamp + Headers (metainfo).
Месаджи с одинаковыми ключами гарантированно пишутся в одну партицию
Что такое топик?
топик (тема) — виртуальное хранилище событий (запечатленный поток событий) одинакового или похожего содержания, из которого приложение-потребитель извлекает необходимую ему информацию.
Топик не гарантирует порядок записей в отличии от партишна.
Что такое партиция?
Распределенный отказоустойчивый log.
Сообщения хранятся в одной из партиций топика.
Каждый топик состоит из 1 и более партиций, распределенных между брокерами внутри одного кластера, что позволяет клиентам писать и читать месаджи в / с несколько брокером одновременно.
Партиции - основной инструмент масштабирования кафки: если консумеры не справляются или нужно распределить нагрузку - добавляем партиции в топик.
Теоретический лимит партиций на кластер - 200000.
Что таое auto.offset.reset?
определяет как должен вести себя консумер читая из партиции, в которой нет начального оффсета.
если мы на лету добавляем партицию в проде, надо сделать auto.offset.reset=earlyest, тогда можно будет прочитать все данные.
https://medium.com/lydtech-consulting/kafka-consumer-auto-offset-reset-d3962bad2665
Что такое Оффсет?
при попадании сообщения в партицию оно ставится в голову и ему назначается офсет: уникальный монотонно возрастающий 64-bit unsigned int
Что такое брокер?
брокер — сервер / узел / диспетчер передачи сообщения от процесса-продюсера приложению-потребителю;
Что такое кластер?
Объединение серверов.
Что такое consumer group?
Каждый консумер является частью группы.
Kafka гарантирует, что конкретное сообщение будет обработано 1 раз на всю группу.
Разные группы могут независимо читать данные из одного топика в своём темпе.
каждая группа имеет название и регистрируется брокерами в кластере.
когда несколько консумеров из одной группы читают данные из одного топика, то каждый консумер читает данные из разных партиций, распределяя нагрузку.
каждому члену группы назначается уникальная партиция - 2 консумера не могут читать одну партицию.
идеально, если партиции = консумеры. если консумеров больше - кто-то из них не сможет читать.
BP: 4 партиции на консумера, 3 реплики на партицию.
Что такое гарантии доставки, как при записи, так и при чтении?
Запись:
- Когда источник посылает сообщение, он даёт знать брокеру Kafka, какого рода уведомление он хочет получить, задав одну из настроек:
-Без уведомлений, автоматический режим. Acks=0.
-Уведомление о получении сообщения лидером. Acks=1 (default)
-Уведомление о получении сообщения лидером и всеми участвующими в синхронизации
репликами. Acks=All
Чтение:
- Брокер знает офсет партиции для каждого консумера и даже если к. отвалится, то подключившись, он запросит у брокера офсет и продолжит чтение.
- Долговечность сообщений — сообщения, сохранённые в сегменте, не теряются;
Потеря сообщений может произойти только в случае сбоя лидера и отсутствия участвующих в синхронизации реплик.
отличие Кафки от MQ (вообще корректнее спрашивать отличие брокера ивентов от брокеров сообщений, но Кафка уже давно является синонимом брокера ивентов, но есть и другие, типа Apache Pulsar)
MQ + Kafka : Producer -> Server -> pull (kafka) / push (rabbitMQ) -> Consumer.
pull - консумер тянет сообщения из очереди,
push - очередь отправляет сообщения консумеру.
MQ: Сервер отправляет сообщение консумеру и ставит его в состояние “in flight” - оно недоступно другим консумерам, консумер обрабатывает сообщениие и посылает в ответ ack / nack, сервер либо удаляет сообщение из очереди, либо разблокирует его для отправки следующему консумеру. Разблокирует и в случае таймаута.
Kafka: сообщения не удаляются помере их обработки консумерами. таким образом одно сообщение может быть обработано сколько угодно раз разными консумерами и в разных контекстах.
Очередность в кафке:
брокер знает офсет партиции для каждого консумера и даже если к. отвалится, то подключившись, он запросит у б. офсет и продолжит чтение.
Что такое Kafka Connect?
Фреймворк для обмена данными между топиком и внешней системой (БД / MQ / файловая система / …)
zookeeper vs working node
zookeeper управляет кластером
working node - брокер, обрабатывает данные.
zookeeper хранит метаданные (
какой брокер - контроллер (брокер, отвечающий за выбор лидеров партиций)?
какой брокер - лидер?
в каком состоянии лидеры, их партиции и их реплики?
), работает асинхронно.
падение zookeeper = падение кластера.
Брокеры общаются друг с другом через зукипера.
partition leader vs follower
MASTER <=> SLAVE
У каждой партиции есть лидер (брокер, который работает с клиентами: принимает и отдаёт сообщения).
К лидеру обращаются 0…n фоловеров (брокеры, хранящие реплику данной партиции).
Чтобы узнать кто лидер, клиент запрашивает у брокера метаданные.
Принимая сообщение от продюсера, узел реплицирует (копирует) его, а копии сохраняет на разных узлах. При этом один из узлов назначается лидером секции, через него потребители будут обращаться к записям. Другие брокеры остаются ведомыми, их главная задача — обеспечить сохранность сообщения (его копий) даже при выходе одного или нескольких узлов из строя.