Ответ
Опыт работы с Apache Kafka включает разработку, настройку и эксплуатацию в production-среде в течение 2+ лет.
Ключевые области опыта
-
Развертывание и администрирование
- Настройка Kafka-кластера из 3 брокеров (Zookeeper ensemble из 3 узлов).
- Конфигурация репликации (factor=3) и партиционирования для отказоустойчивости и параллелизма.
- Мониторинг через JMX-метрики, интеграция с Prometheus/Grafana.
-
Разработка Producer и Consumer на Java
- Использование как нативного Kafka Client API, так и Spring Kafka.
- Настройка критических параметров для надежности и производительности.
Пример Producer с гарантией доставки:
@Configuration public class KafkaProducerConfig { @Bean public ProducerFactory<String, OrderEvent> producerFactory() { Map<String, Object> config = new HashMap<>(); config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka1:9092,kafka2:9092"); config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); // Гарантии доставки config.put(ProducerConfig.ACKS_CONFIG, "all"); // Ждем подтверждения от всех реплик config.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true); // Идемпотентность config.put(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, 5); // При включенной идемпотентности return new DefaultKafkaProducerFactory<>(config); } }Пример Consumer с ручным управлением offset:
@KafkaListener(topics = "orders", groupId = "order-processor") public void listen(OrderEvent event, Acknowledgment ack) { try { processOrder(event); // Обработка ack.acknowledge(); // Ручное подтверждение после успешной обработки } catch (Exception e) { // Отправка в dead-letter topic или повторная обработка sendToDlt(event, e); } } -
Обеспечение семантики Exactly-Once (EOS)
- Использование Kafka Transactions API для атомарной записи в несколько топиков.
- Паттерн «Consumer-Transform-Producer» в рамках одной транзакции.
-
Обработка потоков данных
- Использование Kafka Streams для построения приложений реального времени (агрегации, соединения потоков).
- Понимание таких концепций, как KTable vs KStream, состояние (state stores), оконные операции.
-
Решение практических проблем
- Оптимизация пропускной способности: настройка
batch.size,linger.ms,compression.type. - Обработка ребалансировки потребителей (rebalance) без потерь данных.
- Работа со схемами данных через Apache Avro и Confluent Schema Registry.
- Оптимизация пропускной способности: настройка
Итог: Опыт охватывает полный цикл — от развертывания кластера до разработки отказоустойчивых приложений, обрабатывающих миллионы событий в день, с фокусом на надежность и семантику доставки.