KAFKA Flashcards

1
Q

Что такое распределённое хранилище?

A

Система, работающая на нескольких машинах, каждая машина - часть хранилища. Пользователь видит это как одно целое.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое горизонтальное и вертикальное масштабирование?

A

горизонтальное - Увеличение ресурсов за счёт добавления в систему новых машин.
вертикальное- увеличение мощности машины (cpu, ram, …). Имеет предел и даунтайм

эти 2 вида можно комбинировать.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое отказоустойчивость?

A

Свойство, позволяющее системе не иметь единую точку отказа. Это означает, что система способна продолжать работу, даже если один или несколько ее компонентов перестали функционировать.

Так же называется резилиентность

Для достижения отказоустойчивости системы, ее компоненты могут быть дублированы или распределены на несколько узлов, которые могут работать независимо друг от друга. Если один узел перестает работать, другие узлы могут продолжить обслуживание клиентов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое лог?

A

Упорядоченная по времени append-only последовательность записей (структура данных).
Может принимать данные, но содержащиеся данные неизменяемы.

Важным свойством журналов является их неизменяемость, то есть записи, которые уже были добавлены в журнал, не могут быть изменены или удалены. Это обеспечивает надежность и целостность данных в журнале.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое Apache Kafka?

A

Распределённое отказоустойчивое горизонтально масштабируемое хранилище, основной структурой данных которого является append-only log. Она поддерживает потоковую обработку данных и имеет экосистему коннектооров для интеграции с БД и другими хранилищами.

Может выступать как:
- Брокер событий или система пайплайнов с помощью которой элементы распределенной системы общаются между собой.
- Система коммуникаций между сервисами, если она грамотно выстроена, позволяет компонентам ставить друг другу задачи, сообщать об изменениях в системе и уведомлять заинтересованные части логики приложения о своих состояниях.

https://mcs.mail.ru/blog/apache-kafka-chto-eto-i-kak-rabotaet

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как работает кафка?

A

В упрощенном виде работа Kafka Apache выглядит следующим образом:

  • Приложение-продюсер создает сообщение и отправляет его на узел Kafka.
  • Брокер сохраняет сообщение в топике, на который подписаны приложения-потребители.
  • Потребитель при необходимости делает запрос в топик и получает из него нужные данные.
    Принимая сообщение от продюсера, узел реплицирует (копирует) его, а копии сохраняет на разных узлах. При этом один из брокеров назначается лидером секции, через него потребители будут обращаться к записям. Другие брокеры остаются ведомыми, их главная задача — обеспечить сохранность сообщения (его копий) даже при выходе одного или нескольких узлов из строя.

Процесс работы Apache Kafka можно разбить на несколько шагов:

  1. Создание топика: производитель создает топик в Kafka, который будет использоваться для передачи сообщений.
  2. Запись сообщений: производитель записывает сообщения в топик. Сообщения состоят из ключа и значения.
  3. Хранение сообщений: сообщения сохраняются в журнале (log), который является упорядоченной по времени структурой данных.
  4. Чтение сообщений: подписчик читает сообщения из топика. Подписчик может читать сообщения в режиме реального времени или задать временной интервал, за который нужно прочитать сообщения.
  5. Обработка сообщений: подписчик обрабатывает сообщения, которые получил из топика.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Какие задачи решает Kafka

A

Apache Kafka - это распределенная система обмена сообщениями, которая используется для обработки потоков данных в реальном времени. Kafka позволяет эффективно передавать сообщения от одного приложения к другому, а также сохранять сообщения для последующей обработки.

Основные задачи, которые решает Kafka:

  1. Передача сообщений: Kafka обеспечивает быструю и надежную передачу сообщений от одного приложения к другому.
  2. Хранение сообщений: Kafka сохраняет сообщения в хранилище данных, которое может быть использовано для повторной обработки или анализа потоков данных.
  3. Распределение сообщений: Kafka позволяет масштабировать приложения путем распределения сообщений между несколькими узлами кластера Kafka.
  4. Обработка потоков данных: Kafka поддерживает обработку потоков данных в режиме реального времени, что позволяет обрабатывать данные в непрерывном режиме и быстро реагировать на изменения в данных.
  5. Интеграция с другими системами: Kafka может использоваться для интеграции с другими системами, такими как базы данных, хранилища данных и системы обработки данных в реальном времени.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Кто такие producer & consumer?

A

продюсер (producer) — приложение или процесс, генерирующий и посылающий данные (публикующий сообщение);

потребитель (consumer)— приложение или процесс, который принимает сгенерированное продюсером сообщение;
Потребитель знает из какого брокера читать сообщение.

сообщение — пакет данных, необходимый для совершения какой-либо операции (например, авторизации, оформления покупки или подписки);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

“acks” в Kafka Producer

A

“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” зависит от требований к надежности и производительности вашей системы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что такое retention?

A

задает условия хранения данных:
retention.ms - время хранения
retention.bytes - задаёт размер партиции.
NB: срок хранения не влияет на производительность системы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое сообщение в кафке?

A

Key + Value + Timestamp + Headers (metainfo).
Если ключ = null, то партиции используется поочередно(round robin)
Месаджи с одинаковыми ключами гарантированно пишутся в одну партицию

Key используется для сохранения порядка в очереди сообщений для одной бизнес сущности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое топик?

A

топик (тема) — виртуальное хранилище сообщений (журнал записей) одинакового или похожего содержания, из которого приложение-потребитель извлекает необходимую ему информацию.
топик это логическая единица разделения данных.(топик 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое партиция?

A

Распределенный отказоустойчивый log.
Лог это состояние системы в момент времени

Каждая партиция это по факту мини БД

Сообщения хранятся в одной из партиций топика.
Каждый топик состоит из 1 и более партиций, распределенных между брокерами внутри одного кластера, что позволяет клиентам писать и читать месаджи в / с несколько брокером одновременно.

Партиции - основной инструмент масштабирования кафки: если консумеры не справляются или нужно распределить нагрузку - добавляем партиции в топик.
Можно писать параллельно в несколько партиций.(партиция - единица паралеллизации на запись)

Теоретический лимит партиций на кластер - 200000.
Желательно иметь по 3-4 партиции на консюмера

партиции нумеруются с нуля.
в топики может быть несколько партиций. запись в партици производится с конца.

Лидер партиции в Kafka - это узел, который отвечает за запись новых сообщений в данную партицию и координирует чтение сообщений на этой партиции. Фолловеры - это узлы, которые реплицируют данные из лидера и обеспечивают отказоустойчивость Kafka. Если лидер выходит из строя, один из фолловеров автоматически становится новым лидером и продолжает работу с партицией.
Лидеры и фолловеры распологаются по разным брокерам.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что таое auto.offset.reset?

A

определяет как должен вести себя консумер читая из партиции, в которой нет начального оффсета.
если мы на лету добавляем партицию в проде, надо сделать auto.offset.reset=earlyest, тогда можно будет прочитать все данные.

https://medium.com/lydtech-consulting/kafka-consumer-auto-offset-reset-d3962bad2665

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что такое Consumer Оффсет?

A

Consumer Offset (смещение потребителя) в Kafka - это позиция в логе, указывающая, до какого сообщения потребитель уже прочитал. Каждый потребитель (consumer) в Kafka имеет свой собственный оффсет для каждой темы и партиции (partition).

Consumer должен коммитить свой offset

если Consumer падает, то после этого он может продолжить с того сообщения на котором упал, зная offset

Consumer offset позволяет потребителям продолжать обработку сообщений с того места, где они остановились при предыдущем запуске, а не начинать обработку сообщений заново. Это важно для сохранения целостности данных и избежания обработки дубликатов сообщений.

при попадании сообщения в партицию оно ставится в голову и ему назначается офсет: уникальный монотонно возрастающий 64-bit unsigned int

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое брокер?

A

брокер — сервер / узел / диспетчер передачи сообщения от процесса-продюсера приложению-потребителю;
Один из брокеров это контроллер - он контролирует работу всего кластера.

17
Q

Что такое кластер?

A

Объединение брокеров.

18
Q

Что такое consumer group?

A

consumer group используется для масштабирования чтения сообщений.
Каждый Консьюмер из Групп читает из своего набора партиций

каждый консумер является частью группы.
каждая группа имеет название и регистрируется брокерами в кластере.
когда несколько консумеров из одной группы читают данные из одного топика, то каждый консумер читает данные из разных партиций, распределяя нагрузку.

каждому члену группы назначаетсмя уникальная партиция - 2 консумера не могут читать одну партицию.
идеально, если партиции = консумеры. если консумеров больше - кто-то из них не сможет читать.

разные группы могут независимо читать данные из одного топика в своём темпе.

есть гарантия, что конкретное сообщение будет обработано 1 раз на всю группу.

BP: 4 партиции на консумера, 3 реплики на партицию.

19
Q

Что такое гарантии доставки, как при записи, так и при чтении?

A

Чтение: брокер знает офсет партиции для каждого консумера и даже если к. отвалится, то подключившись, он запросит у б. офсет и продолжит чтение.

Гарантии доставки при записи:

  • At most once (не более одного раза): в этом режиме записи сообщение может быть потеряно в случае сбоя производителя или отказа системы. Это означает, что сообщение может быть отправлено только один раз, но не гарантируется его доставка.
  • At least once (как минимум один раз): в этом режиме записи сообщение гарантированно доставляется в систему, но может быть записано более одного раза, что может привести к дубликатам сообщений. Для предотвращения дубликатов в Kafka используется consumer offset.
  • Exactly once (ровно один раз): это самый надежный режим записи, который гарантирует, что каждое сообщение будет записано в систему только один раз. Для этого используется механизм транзакций, который обеспечивает атомарность записи нескольких сообщений.

Гарантии доставки при чтении:

  • At most once: в этом режиме чтения сообщение может быть пропущено, если потребитель завершит свою работу или будет недоступен. Это означает, что сообщение может быть прочитано не более одного раза.
  • At least once: в этом режиме чтения сообщение гарантированно будет прочитано потребителем, но может быть прочитано более одного раза, что может привести к дубликатам сообщений. Для предотвращения дубликатов используется consumer offset и идемпотентность потребителей.
  • Exactly once: это самый надежный режим чтения, который гарантирует, что каждое сообщение будет прочитано ровно один раз. Для этого используется механизм транзакций, который обеспечивает атомарность чтения и обработки сообщений.
20
Q

отличие Кафки от MQ (вообще корректнее спрашивать отличие брокера ивентов от брокеров сообщений, но Кафка уже давно является синонимом брокера ивентов, но есть и другие, типа Apache Pulsar)

A

MQ + : Producer -> Server -> pull (kafka) / push (rabbitMQ) -> Consumer.

MQ:Сервер отправляет сообщение консумеру и ставит его в состояние “in flight” - оно недоступно другим консумерам, консумер обрабатывает сообщениие и посылает в ответ ack / nack, сервер либо удаляет сообщение из очереди, либо разблокирует его для отправки следующему консумеру. Разблокирует и в случае таймаута.

Kafka: сообщения не удаляются помере их обработки консумерами. таким образом одно сообщение может быть обработано соклько угодно раз разными консумерами и в разных контекстах.

Очередность в кафке:
брокер знает офсет партиции для каждого консумера и даже если к. отвалится, то подключившись, он запросит у б. офсет и продолжит чтение.

21
Q

Kafka Streams

A

Kafka Streams - это библиотека для обработки и анализа данных в реальном времени на основе Apache Kafka. Она позволяет создавать потоковые приложения, которые могут обрабатывать данные из Kafka-топиков и записывать результаты в другие топики.

Библиотека обработки и преобразования данных внутри Kafka

Kafka Streams предоставляет возможность обрабатывать данные с помощью функций высшего порядка, таких как map, filter и reduce, и выполнять сложные операции над потоками данных, такие как агрегация и соединение потоков.

Благодаря своей интеграции с Kafka, Kafka Streams обеспечивает гарантированную доставку и сохранение сообщений в случае сбоев, а также поддержку масштабирования в горизонтальном направлении. Это позволяет создавать высокопроизводительные и отказоустойчивые приложения для обработки данных в реальном времени на основе Kafka.

22
Q

Что такое Kafka Connect?

A

Фреймворк для обмена данными между топиком и внешней системой (БД / MQ / файловая система / …)

инструмент для масштабируемой, надежной передачи сообщений между Kafka и другими системами обработки / хранения данных

23
Q

zookeeper vs working node

A

zookeeper управляет кластером
working node - брокер, обрабатывает данные.
зукипер это по факту бд, которая хранит конфигурационные настройки кластера
zookeeper хранит метаданные (
какой брокер - контроллер (брокер, отвечающий за выбор лидеров партиций)?
какой брокер - лидер?
в каком состоянии лидеры, их партиции и их реплики?
), работает асинхронно.
падение zookeeper = падение кластера, например из-за (split brain)

Брокеры общаются друг с другом через зукипера.

Zookeeper выполняет роль хранилища метаданных и координатора. Именно он способен сказать, живы ли брокеры (посмотреть на это глазами zookeeper можно через zookeeper-shell командой ls /brokers/ids), какой из брокеров является контроллером (get /controller), находятся ли партиции в синхронном состоянии со своими репликами (get /brokers/topics/topic_name/partitions/partition_number/state). Также именно к zookeeper сперва пойдут producer и consumer, чтобы узнать, на каком брокере какие топики и партиции хранятся. В случаях, когда для топика задан replication factor больше 1, zookeeper укажет, какие партиции являются лидерами (в них будет производиться запись и из них же будет идти чтение). В случае падения брокера именно в zookeeper будет записана информация о новых лидер-партициях (с версии 1.1.0 асинхронно, и это важно).

Zookeeper - это централизованная служба, используемая для поддержки информации о конфигурации, именования, обеспечения распределенной синхронизации и предоставления групповых услуг в распределенных системах. Он помогает управлять координацией и коммуникацией между разными узлами в распределенной системе.

С другой стороны, рабочий узел (working node) - это узел в распределенной системе, который выполняет реальную работу и обрабатывает запросы от клиентов. Рабочие узлы могут быть нескольких типов и выполнять разные функции в системе, но их основная цель - обеспечить вычислительную мощность и хранение данных в распределенной среде.

24
Q

partition leader vs follower

A

У каждой партиции есть лидер (брокер, который работает с клиентами: принимает и отдаёт сообщения).
К лидеру обращаются 0…n фоловеров (брокеры, хранящие реплику данной партиции).
Чтобы узнать кто лидер, клиент запрашивает у брокера метаданные.

Как уже было сказано, в Apache Kafka, разделы используются для хранения и обработки данных. Каждый раздел может быть распределен между несколькими брокерами Kafka в кластере.

Лидер раздела отвечает за все операции записи и чтения данных в данный раздел. Он принимает все записи данных, обрабатывает их и реплицирует на всех последователей раздела, чтобы обеспечить отказоустойчивость и увеличить пропускную способность системы. Лидер также отвечает за координацию чтения и записи данных из данного раздела.

Последователи раздела следят за изменениями данных, хранящимися в лидере раздела. Они реплицируют все записи данных, которые были выполнены лидером, и используют эти данные для чтения запросов. Если лидер раздела выходит из строя, один из последователей становится новым лидером раздела.

Когда клиент отправляет запрос на чтение данных из раздела, он отправляет запрос лидеру раздела. Лидер раздела, затем, возвращает данные клиенту, либо, если запрос не может быть выполнен из-за проблем с доступностью, он возвращает сообщение об ошибке.

Кроме того, лидеры и последователи разделов постоянно обмениваются сообщениями, чтобы обновлять информацию о состоянии разделов в кластере и поддерживать консистентность данных. В целом, разделы и их лидеры и последователи играют важную роль в обеспечении высокой доступности и пропускной способности системы в Apache Kafka.