Расскажи про опыт работы с очередями

«Расскажи про опыт работы с очередями» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я работал с Apache Kafka как основным брокером событий в архитектуре event-driven микросервисов. Задачи включали развертывание, настройку, мониторинг и обеспечение отказоустойчивости кластера.

Развертывание и конфигурация: Развернул Kafka-кластер в Kubernetes с помощью оператора Strimzi, что позволило управлять топиками, пользователями и коннекторами декларативно через CRD.

# Пример KafkaTopic CRD для Strimzi
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: orders-events
  labels:
    strimzi.io/cluster: my-kafka-cluster
spec:
  partitions: 12
  replicas: 3
  config:
    retention.ms: 604800000 # 7 дней
    cleanup.policy: delete
    min.insync.replicas: 2 # Гарантия доставки при потере одной реплики

Основные практики, которые я внедрял:

  1. Мониторинг и алертинг: Настроил сбор метрик Kafka (через JMX Exporter) в Prometheus. Ключевые метрики для алертов:
    • UnderReplicatedPartitions > 0
    • ActiveControllerCount != 1
    • Рост consumer lag (kafka_consumer_lag)
  2. Обеспечение надежности:
    • Настройка min.insync.replicas=2 и acks=all для критичных топиков.
    • Создание политик хранения данных (retention) в зависимости от их назначения (логи событий — 7 дней, данные для аудита — 1 год).
    • Регулярные бэкапы топиков с помощью MirrorMaker 2 в DR-кластер.
  3. Работа с проблемами:
    • Consumer lag: Настраивал автоскейлинг consumer-деплойментов в K8s на основе метрики lag. Для batch-обработчиков оптимизировал размер батча и интервалы.
    • Рост диска: Настроил алерты на свободное место и автоматическое удаление старых данных по политикам. Использовал tiered storage (сейчас тестируем с KRaft).
    • Сетевые проблемы: Анализировал метрики вроде RequestQueueTimeMs и NetworkProcessorAvgIdlePercent для выявления узких мест.

Также имею опыт настройки Kafka Connect для интеграции с внешними системами (например, заливка данных из топиков в S3 через Confluent S3 Sink Connector).