# Cобеседование Apache Kafka. Разбор вопросов и ответов.       Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. Если вам интересно мое резюме: https://github.com/DEBAGanov # Apache Kafka - [Cобеседование по Apache Kafka. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) - [Базы данных](#базы-данных) - [Что такое _«база данных»_?](#что-такое-база-данных) - [Что такое _«система управления базами данных»_?](#что-такое-система-управления-базами-данных) [1. Что такое Apache Kafka?] (#1. Что такое Apache Kafka?) [2. Каковы основные компоненты Kafka?] (#2. Каковы основные компоненты Kafka?) [3. Что такое Kafka Broker?] (#3. Что такое Kafka Broker?) [4. Что такое Topic в Kafka?] (#4. Что такое Topic в Kafka?) [5. Как работает модель публикации/подписки в Kafka?] (#5. Как работает модель публикации/подписки в Kafka?) [6. Что такое Partition в Kafka и зачем он нужен?] (#6. Что такое Partition в Kafka и зачем он нужен?) [7. Как Kafka обеспечивает высокую доступность и отказоустойчивость?] (#7. Как Kafka обеспечивает высокую доступность и отказоустойчивость?) [8. Что такое Consumer Group в Kafka?] (#8. Что такое Consumer Group в Kafka?) [9. Как происходит балансировка нагрузки между потребителями в группе?] (#9. Как происходит балансировка нагрузки между потребителями в группе?) [10. Что такое Offset в Kafka?] (#10. Что такое Offset в Kafka?) [11. Как можно гарантировать порядок сообщений в Kafka?] (#11. Как можно гарантировать порядок сообщений в Kafka?) [12. Какова роль Zookeeper в Kafka?] (#12. Какова роль Zookeeper в Kafka?) [13. Что такое Producer в Kafka?] (#13. Что такое Producer в Kafka?) [14. Как реализовать асинхронную отправку сообщений в Kafka?] (#14. Как реализовать асинхронную отправку сообщений в Kafka?) [15. Как настроить сериализацию и десериализацию сообщений?] (#15. Как настроить сериализацию и десериализацию сообщений?) [16. В чем разница между KafkaProducer и KafkaConsumer?] (#16. В чем разница между KafkaProducer и KafkaConsumer?) [17. Что такое Kafka Streams?] (#17. Что такое Kafka Streams?) [18. Как использовать Kafka Connect?] (#18. Как использовать Kafka Connect?) [19. Что такое Retention Policy в Kafka?] (#19. Что такое Retention Policy в Kafka?) [20. Как можно управлять конфигурацией Kafka?] (#20. Как можно управлять конфигурацией Kafka?) [21. Что такое Dead Letter Queue (DLQ) в Kafka?] (#21. Что такое Dead Letter Queue (DLQ) в Kafka?) [22. Как реализовать транзакции в Kafka?] (#22. Как реализовать транзакции в Kafka?) [23. Как производители и потребители обрабатывают ошибки в Kafka?] (#23. Как производители и потребители обрабатывают ошибки в Kafka?) [24. Каковы основные преимущества использования Kafka?] (#24. Каковы основные преимущества использования Kafka?) [25. Что такое Kafka Schema Registry?] (#25. Что такое Kafka Schema Registry?) [26. Как использовать Avro с Kafka?] (#26. Как использовать Avro с Kafka?) [27. Как обеспечить безопасность в Kafka?] (#27. Как обеспечить безопасность в Kafka?) [28. Что такое логическая архитектура Kafka?] (#28. Что такое логическая архитектура Kafka?) [29. Как сделать мониторинг Kafka?] (#29. Как сделать мониторинг Kafka?) [30. Что такое KSQL?] (#30. Что такое KSQL?) [31. Как обрабатывать события в реальном времени с помощью Kafka?] (#31. Как обрабатывать события в реальном времени с помощью Kafka?) [32. Что такое Compaction в Kafka?] (#32. Что такое Compaction в Kafka?) [33. Как настроить репликацию в Kafka?] (#33. Как настроить репликацию в Kafka?) [34. Чем отличается acks=all от acks=1?] (#34. Чем отличается acks=all от acks=1?) [35. Как управлять производительностью Kafka?] (#35. Как управлять производительностью Kafka?) [36. Что такое Kafka Consumer Lag?] (#36. Что такое Kafka Consumer Lag?) [37. Как можно отладить Kafka-приложение?] (#37. Как можно отладить Kafka-приложение?) [38. Что такое Kafka Streams API?] (#38. Что такое Kafka Streams API?) [39. Как использовать Kafka с Spring Boot?] (#39. Как использовать Kafka с Spring Boot?) [40. Как реализовать интеграцию Kafka с базой данных?] (#40. Как реализовать интеграцию Kafka с базой данных?) [41. Что такое Kafka MirrorMaker?] (#41. Что такое Kafka MirrorMaker?) [42. Как обеспечить обработку событий в порядке их получения?] (#42. Как обеспечить обработку событий в порядке их получения?) [43. Что такое Kafka REST Proxy?] (#43. Что такое Kafka REST Proxy?) [44. Как использовать KafkaTemplate в Spring Kafka?] (#44. Как использовать KafkaTemplate в Spring Kafka?) [45. Как обрабатывать JSON-сообщения в Kafka?] (#45. Как обрабатывать JSON-сообщения в Kafka?) [46. Что такое Partition Reassignment?] (#46. Что такое Partition Reassignment?) [47. Как использовать Kafka для микросервисной архитектуры?] (#47. Как использовать Kafka для микросервисной архитектуры?) [48. Что такое Producer Callback и как его использовать?] (#48. Что такое Producer Callback и как его использовать?) [49. Как реализовать шифрование сообщений в Kafka?] (#49. Как реализовать шифрование сообщений в Kafka?) [50. Какие инструменты мониторинга совместимы с Kafka?] (#50. Какие инструменты мониторинга совместимы с Kafka?) - [Источники](#источники) Что такое очередь сообщений. Основные концепции очередей ? Kafka vs Rabbit MQ Основные сущности Kafka Zookeper. Хранение метаданных кластера Kafka кластер. Устройство Партиционирование. Leader партиция. Репликация Настройка Kafka кластера для корректной работы партиционирования и репликации Устройство файлового хранилища Kafka TTL Producer Producer. Из каких шагов состоит инцициализация Стратегии коммитинга. Гарантия доставки Сериализация, Десериализация Стратегии выбора партиции продюссером Можно ли из топика (распределен по 3 партициям) прочитать сообщения в том же порядке, в котором они были записаны? Почему? Как сделать так, чтобы все сообщения по одному клиенту попали в одну партицию? Timestamp Headers Batch size. Linger time Retry 1. Расскажите мне о ситуации, когда Кафка — не лучший вариант. 2. Как бы вы изменили время удержания в Kafka? 3. Объясните максимальный размер сообщения, которое может получить Kafka. 4. Сравните Apache Kafka с другой популярной потоковой платформой. 5. Когда бы вы использовали функцию кластера в Kafka? Как разбалансировать кластер в Kafka? 6. Что бы вы сделали, если бы при использовании Kafka возникла ошибка? ## 7. Как бы вы получили одно сообщение от Кафки во время производства данных? #### Получение одного сообщения из Kafka Чтобы получить одно сообщение из Kafka во время производства данных, вам нужно использовать **Kafka Consumer**. Вот основные шаги, которые помогут вам это сделать: 1. **Создание Consumer**: Сначала необходимо создать экземпляр Kafka Consumer, указав необходимые параметры конфигурации, такие как `bootstrap.servers`, `group.id`, и `key.deserializer`, `value.deserializer`. 2. **Подписка на топик**: После создания Consumer, вы должны подписаться на нужный топик, из которого хотите получать сообщения. Это делается с помощью метода `subscribe()`. 3. **Получение сообщения**: Для получения сообщения используйте метод `poll()`. Этот метод будет блокировать выполнение, пока не получит сообщение. Чтобы получить только одно сообщение, вы можете использовать `poll(Duration.ofMillis(100))` и затем обработать полученное сообщение. 4. **Коммит смещения**: После обработки сообщения, если вы хотите зафиксировать смещение, используйте метод `commitSync()`, чтобы сохранить текущее положение в потоке сообщений. Вот пример кода на Java: ```java import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; import java.time.Duration; import java.util.Collections; import java.util.Properties; public class KafkaSingleMessageConsumer { public static void main(String[] args) { Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); KafkaConsumer consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList("my-topic")); // Получение одного сообщения ConsumerRecord record = consumer.poll(Duration.ofMillis(100)).iterator().next(); System.out.println("Получено сообщение: " + record.value()); // Коммит смещения consumer.commitSync(); consumer.close(); } } ``` Этот код создаёт Consumer, подписывается на топик и получает одно сообщение. Не забудьте обработать возможные исключения, такие как `NoSuchElementException`, если сообщений нет. 8. Что вы имеете в виду, когда говорите «отказоустойчивость»? ## 9. Как бы вы интегрировали Kafka с другими фреймворками? 1. **Использование Kafka Connect**: Kafka Connect — это инструмент, который позволяет легко интегрировать Kafka с другими системами, такими как базы данных, хранилища данных и другие системы обработки данных. Он поддерживает множество коннекторов, которые могут быть настроены для автоматической передачи данных между Kafka и другими источниками или приемниками данных. 2. **Интеграция с Apache Spark**: Apache Spark может использовать Kafka для обработки потоковых данных. Spark Streaming позволяет обрабатывать данные в реальном времени, получая их из Kafka. Это позволяет создавать мощные приложения для анализа данных, которые могут обрабатывать большие объёмы информации. 3. **Использование с Apache Storm**: Apache Storm также может быть интегрирован с Kafka для обработки потоков данных. Storm позволяет обрабатывать данные в реальном времени и может использовать Kafka как источник данных, что делает его идеальным для приложений, требующих низкой задержки. 4. **Интеграция с REST API**: Kafka может быть использован в сочетании с REST API для передачи данных между различными приложениями. Это позволяет разработчикам создавать приложения, которые могут взаимодействовать с Kafka через стандартные HTTP-запросы. 5. **Подключение к системам мониторинга и аналитики**: Kafka может быть интегрирован с системами мониторинга и аналитики, такими как Elasticsearch и Grafana, для визуализации и анализа потоковых данных в реальном времени. Эти методы интеграции позволяют использовать возможности Kafka для создания масштабируемых и эффективных систем обработки данных. 1. Что такое Apache Kafka? Apache Kafka - это распределенная платформа потоковой передачи данных, которая позволяет публиковать и подписываться на потоки записей. Она разработана для обработки данных в реальном времени и обеспечивает высокую пропускную способность, масштабируемость и надежность. 2. Каковы основные компоненты Kafka? Основные компоненты: - Брокеры (Brokers) - Производители (Producers) - Потребители (Consumers) - Топики (Topics) - ZooKeeper - Партиции (Partitions) 3. Что такое Kafka Broker? Брокер - это сервер Kafka, который хранит данные и обслуживает запросы клиентов. Кластер Kafka состоит из нескольких брокеров, где каждый имеет уникальный ID. 4. Что такое Topic в Kafka? Topic - это категория или канал, в который публикуются записи. Топики могут иметь множество производителей и потребителей. Каждый топик разделен на партиции. 5. Как работает модель публикации/подписки в Kafka? Производители публикуют сообщения в топики, а потребители подписываются на эти топики для получения сообщений. Это обеспечивает слабую связанность между отправителями и получателями. 6. Что такое Partition в Kafka и зачем он нужен? Партиция - это упорядоченная последовательность сообщений в топике. Партиции позволяют: - Распределять данные между брокерами - Обеспечивать параллельную обработку - Масштабировать производительность 7. Как Kafka обеспечивает высокую доступность и отказоустойчивость? Через: - Репликацию данных - Распределение партиций между брокерами - Автоматическое восстановление после сбоев - Выборы лидера партиции 8. Что такое Consumer Group в Kafka? Consumer Group - это группа потребителей, которые совместно обрабатывают сообщения из топиков. Каждое сообщение доставляется только одному потребителю в группе. 9. Как происходит балансировка нагрузки между потребителями в группе? Kafka автоматически распределяет партиции между потребителями в группе. При добавлении или удалении потребителя происходит ребалансировка. 10. Что такое Offset в Kafka? Offset - это уникальный последовательный идентификатор сообщения в партиции. Потребители используют offset для отслеживания прочитанных сообщений. 11. Как можно гарантировать порядок сообщений в Kafka? Порядок сообщений гарантируется только в пределах одной партиции. Для обеспечения порядка нужно: - Использовать один и тот же ключ партиции для связанных сообщений - Настроить параметр max.in.flight.requests.per.connection=1 - Использовать подтверждения (acks=all) 12. Какова роль Zookeeper в Kafka? ZooKeeper отвечает за: - Хранение метаданных о кластере - Выборы контроллера - Отслеживание состояния брокеров - Управление квотами и ACL Примечание: с версии 3.0 Kafka может работать без ZooKeeper (KRaft). 13. Что такое Producer в Kafka? Producer - это клиент, который публикует сообщения в топики Kafka. Основные характеристики: - Может отправлять сообщения синхронно или асинхронно - Поддерживает балансировку нагрузки - Имеет встроенные механизмы сериализации 14. Как реализовать асинхронную отправку сообщений в Kafka? Асинхронная отправка реализуется через: - Использование метода send() с callback - Настройку параметра batch.size - Использование producer.flush() при необходимости 15. Как настроить сериализацию и десериализацию сообщений? Через: - Реализацию интерфейсов Serializer и Deserializer - Настройку key.serializer и value.serializer - Использование встроенных сериализаторов (String, Integer, etc.) - Применение форматов как Avro, Protobuf или JSON 16. В чем разница между KafkaProducer и KafkaConsumer? KafkaProducer: - Отправляет сообщения - Управляет партиционированием - Поддерживает асинхронную отправку KafkaConsumer: - Читает сообщения - Управляет смещениями - Поддерживает групповое потребление 17. Что такое Kafka Streams? Kafka Streams - это библиотека для потоковой обработки данных, которая позволяет: - Создавать приложения для обработки потоков - Выполнять агрегации и соединения - Обрабатывать события в реальном времени - Поддерживать состояние приложения 18. Как использовать Kafka Connect? Kafka Connect - это фреймворк для интеграции данных, который: - Поддерживает готовые коннекторы - Позволяет создавать собственные коннекторы - Обеспечивает масштабируемость - Поддерживает распределенный и автономный режимы 19. Что такое Retention Policy в Kafka? Retention Policy определяет: - Как долго хранятся сообщения - Максимальный размер данных - Правила очистки старых данных - Политику компактификации 20. Как можно управлять конфигурацией Kafka? Конфигурацией можно управлять через: - Файлы конфигурации (server.properties) - Динамические настройки через API - Переменные окружения - Инструменты администрирования 21. Что такое Dead Letter Queue (DLQ) в Kafka? DLQ - это специальный топик для сообщений, которые не удалось обработать. Используется для: - Сохранения проблемных сообщений - Анализа ошибок обработки - Повторной обработки сообщений - Мониторинга качества данных 22. Как реализовать транзакции в Kafka? Транзакции в Kafka реализуются через: - Использование TransactionalId - Инициализацию транзакционного продюсера - Методы beginTransaction() и commitTransaction() - Настройку isolation.level для потребителей 23. Как производители и потребители обрабатывают ошибки в Kafka? Обработка ошибок включает: - Retry-механизмы - Exception handlers - Dead Letter Queue - Мониторинг и логирование - Настройку таймаутов 24. Каковы основные преимущества использования Kafka? Основные преимущества: - Высокая производительность - Масштабируемость - Отказоустойчивость - Долговременное хранение - Гарантированная доставка сообщений 25. Что такое Kafka Schema Registry? Schema Registry - это сервис для управления схемами данных, который: - Хранит и версионирует схемы - Обеспечивает совместимость - Поддерживает Avro, Protobuf, JSON Schema - Валидирует сообщения 26. Как использовать Avro с Kafka? Для использования Avro нужно: - Определить схему в формате Avro - Настроить Schema Registry - Использовать AvroSerializer/AvroDeserializer - Управлять эволюцией схем 27. Как обеспечить безопасность в Kafka? Безопасность обеспечивается через: - SSL/TLS шифрование - SASL аутентификацию - ACL авторизацию - Аудит доступа - Шифрование данных 28. Что такое логическая архитектура Kafka? Логическая архитектура включает: - Топики и партиции - Реплики и лидеры - Производители и потребители - Группы потребителей - Контроллер брокера 29. Как сделать мониторинг Kafka? Мониторинг осуществляется через: - JMX метрики - Prometheus/Grafana - Kafka Manager - Custom метрики - Логи брокеров 30. Что такое KSQL? KSQL - это движок потоковых SQL-запросов для Kafka: - Позволяет писать SQL-подобные запросы - Поддерживает агрегации и джойны - Работает в реальном времени - Интегрируется с существующими потоками 31. Как обрабатывать события в реальном времени с помощью Kafka? Обработка в реальном времени осуществляется через: - Kafka Streams API - KSQL - Низкие задержки доставки - Параллельную обработку партиций - Оптимизацию производительности 32. Что такое Compaction в Kafka? Compaction - это механизм очистки топиков, который: - Сохраняет последнее значение для каждого ключа - Уменьшает размер данных - Поддерживает изменяемые состояния - Оптимизирует хранение 33. Как настроить репликацию в Kafka? Настройка репликации включает: - Установку фактора репликации - Выбор лидера партиции - Настройку ISR (In-Sync Replicas) - Управление синхронизацией 34. Чем отличается acks=all от acks=1? acks=all: - Ждет подтверждения от всех реплик - Максимальная надежность - Большая латентность acks=1: - Ждет подтверждения только от лидера - Средняя надежность - Меньшая латентность 35. Как управлять производительностью Kafka? Управление производительностью через: - Настройку параметров брокера - Оптимизацию партиций - Конфигурацию продюсеров/потребителей - Мониторинг метрик - Балансировку нагрузки 36. Что такое Kafka Consumer Lag? Consumer Lag - это отставание потребителя: - Разница между последним опубликованным и прочитанным сообщением - Индикатор производительности - Метрика мониторинга - Показатель здоровья системы 37. Как можно отладить Kafka-приложение? Отладка включает: - Анализ логов - Мониторинг метрик - Использование инструментов отладки - Тестирование конфигураций - Проверку консьюмер-групп 38. Что такое Kafka Streams API? Kafka Streams API предоставляет: - DSL для обработки потоков - Операции над данными - Управление состоянием - Масштабируемость - Отказоустойчивость 39. Как использовать Kafka с Spring Boot? Интеграция включает: - Spring Kafka - Конфигурацию в application.properties - KafkaTemplate - @KafkaListener аннотации - Обработку ошибок 40. Как реализовать интеграцию Kafka с базой данных? Интеграция через: - Kafka Connect - CDC (Change Data Capture) - Пользовательские коннекторы - Транзакционную обработку 41. Что такое Kafka MirrorMaker? Kafka MirrorMaker - это инструмент для репликации данных между кластерами: - Поддерживает географическую репликацию - Обеспечивает аварийное восстановление - Позволяет агрегировать данные - Поддерживает фильтрацию топиков 42. Как обеспечить обработку событий в порядке их получения? Для обеспечения порядка нужно: - Использовать одну партицию для связанных событий - Настроить правильный ключ партиционирования - Использовать временные метки - Контролировать параллелизм обработки 43. Что такое Kafka REST Proxy? Kafka REST Proxy: - Предоставляет HTTP API для Kafka - Позволяет работать с Kafka без клиентских библиотек - Поддерживает форматы JSON/Binary/Avro - Обеспечивает доступ через веб-протоколы 44. Как использовать KafkaTemplate в Spring Kafka? KafkaTemplate используется для: - Отправки сообщений в топики - Обработки подтверждений - Управления транзакциями - Обработки ошибок отправки 45. Как обрабатывать JSON-сообщения в Kafka? Обработка JSON включает: - Использование JsonSerializer/JsonDeserializer - Маппинг на Java-объекты - Валидацию схемы - Обработку ошибок десериализации 46. Что такое Partition Reassignment? Partition Reassignment позволяет: - Перераспределять партиции между брокерами - Балансировать нагрузку - Обрабатывать отказы брокеров - Оптимизировать использование ресурсов 47. Как использовать Kafka для микросервисной архитектуры? Использование в микросервисах: - Асинхронная коммуникация - Паттерн Event Sourcing - CQRS - Распределенные транзакции - Обработка отказов 48. Что такое Producer Callback и как его использовать? Producer Callback: - Асинхронная обработка результатов отправки - Обработка ошибок - Метрики успешности - Подтверждение доставки 49. Как реализовать шифрование сообщений в Kafka? Шифрование реализуется через: - SSL/TLS на транспортном уровне - Шифрование на уровне сообщений - Пользовательские сериализаторы - Управление ключами шифрования 50. Какие инструменты мониторинга совместимы с Kafka? Инструменты мониторинга: - Prometheus/Grafana - Kafka Manager (CMAK) - JMX-мониторинг - ELK Stack - Datadog [к оглавлению](#Базы-данных) # Источники + [Википедия](https://ru.wikipedia.org/wiki/) + [tokarchuk.ru](http://tokarchuk.ru/2012/08/indexes-classification/) + [Quizful](http://www.quizful.net/interview/sql/) [Вопросы для собеседования](README.md)