Какие инструменты используются в Java для работы с Kafka
Что проверяют
Отличаете ли вы клиент от фреймворка вокруг него и умеете ли проверять интеграцию с Kafka, а не только рассказывать про неё. Дальше вопрос уходит в практику: как вы убеждаетесь, что сообщение доехало, и как пишете автотест на потребителя.
Как отвечать
Разложите инструменты по слоям:
kafka-clients: базовая библиотека сKafkaProducer,KafkaConsumerиAdminClient. Полезно знать умолчания: с Kafka 3.0 продюсер идемпотентный иacks=all, у потребителяenable.auto.commit=trueиauto.offset.reset=latest, из-за чего тест «отправили и сразу читаем» ловит пустоту;- Spring for Apache Kafka:
KafkaTemplate,@KafkaListener, контейнеры слушателей,DefaultErrorHandlerс повторами и отправкой в DLT; - Kafka Streams: обработка потока внутри приложения, агрегации и join, state store. Тестируется
TopologyTestDriverизkafka-streams-test-utilsвообще без брокера; - Kafka Connect: отдельный кластер воркеров и готовые коннекторы (JDBC, Debezium, S3) вместо своего кода;
- сериализация: Schema Registry и serde для Avro, Protobuf или JSON Schema, плюс проверка совместимости схем;
- тестовая обвязка: Testcontainers с образом Kafka или Redpanda,
EmbeddedKafkaизspring-kafka-test,MockProducerиMockConsumerдля юнит-уровня; - руками:
kcat, консольныеkafka-console-producer.shиkafka-console-consumer.sh,kafka-consumer-groups.shдля лага, UI вроде AKHQ или Kafdrop.
Уместно добавить, что ZooKeeper из Kafka 4.0 убран полностью и кластер работает в режиме KRaft, поэтому инструкции с zookeeper.connect устарели.
Где спотыкаются
Валят в одну кучу Kafka Streams и Kafka Connect. Первое это библиотека внутри вашего приложения, второе отдельный сервис с конфигурацией коннекторов.
Пишут тест, который отправляет сообщение и тут же читает его новым потребителем с auto.offset.reset=latest. Подписка ещё не встала, ребаланс не прошёл, тест мигает. Лечится earliest, ожиданием назначения партиций и ретраями с таймаутом.
Поднимают один брокер на весь прогон и переиспользуют топики и group.id. Тесты видят чужие сообщения и падают в случайном порядке, хотя по отдельности зелёные.