[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-kafka-kak-ustroena-arkhitektura-konsyumera":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},803,"kak-ustroena-arkhitektura-konsyumera",21,"kafka","Kafka","📨","Как устроена архитектура консюмера?","Консюмер — это клиент Kafka, который подписывается на топики и читает сообщения, используя Kafka Consumer API. Потребители могут быть объединены в группы (Consumer Groups).\n\n### Ключевые характеристики\n\n- **«Smart» консюмер** — консюмер сам управляет чтением и обработкой\n- **Pull-модель** — консюмер опрашивает Kafka, а не получает push\n- **Гарантия обработки** — консюмер отвечает за подтверждение обработки (commit offset)\n- **Автоматический фейловер** в консюмер-группе\n- **Независимая обработка** разными консюмер-группами\n\n### Consumer Group\n\nKafka использует концепцию Consumer Groups для параллельной обработки данных из топиков. Каждый потребитель в группе обрабатывает только часть данных.\n\n- Все сообщения из топика делятся между потребителями в группе\n- Каждая партиция обрабатывается только одним потребителем в группе\n- При выходе из строя потребителя его партиции автоматически перераспределяются (rebalancing)\n\n### Offset (Смещение)\n\nПотребитель отслеживает offset каждой партиции, чтобы знать, с какого сообщения продолжать чтение. Offset — это уникальный идентификатор сообщения в партиции. Потребители могут хранить offset в Kafka или вне её (в БД, файловой системе). При отключении потребитель возобновляет обработку с сохранённого offset.\n\n### Poll (Опрос)\n\nПотребители используют метод `poll()` для опроса Kafka на наличие новых сообщений. Потребитель указывает тайм-аут, после которого `poll()` вернёт пустой результат, если сообщений нет.\n\n### Процесс работы\n\n1. **Инициализация** — подключение к брокерам и присоединение к consumer group\n2. **Подписка** — вызов `subscribe()` на нужные топики\n3. **Опрос** — вызов `poll()` для получения новых сообщений\n4. **Обработка** — извлечение и обработка полезной информации\n5. **Подтверждение** — вызов `commit()` для обновления offset\n6. **Обработка ошибок** — повторные попытки при необходимости\n7. **Завершение** — выход из consumer group и закрытие соединения\n\n> **На собеседовании:** ключевой вопрос — разница между auto-commit и manual commit. Auto-commit (`enable.auto.commit=true`) проще, но может привести к потере или дублированию сообщений. Manual commit даёт полный контроль: `commitSync()` — надёжно, но медленно; `commitAsync()` — быстро, но без гарантии.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"keywords":20,"schemaAnswer":19,"featuredSnippetReady":21},"Как устроена архитектура топика? — Gymterview","Топик — это логическая единица организации данных в Kafka, разбитая на партиции для параллельной обработки.",[7,13],true]