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