Где и как применялась Kafka
Что проверяют
Работали ли вы с Kafka руками или знаете её по статьям. По первому ответу уточняют: какие были гарантии доставки, как коммитили офсеты и что происходило при падении консьюмера посреди обработки.
Как отвечать
Стройте ответ на своём проекте: зачем понадобилась Kafka, какие топики, сколько партиций, какой поток сообщений. Цифры берите из своих дашбордов, а не округлённые «десятки тысяч в секунду». Каркас:
- клиент: чем писали из Go. Частые варианты:
segmentio/kafka-go(чистый Go),IBM/sarama(бывший Shopify/sarama),confluent-kafka-go(обёртка над librdkafka через cgo),twmb/franz-go. Хорошо, если объясните выбор; - порядок: он гарантирован только внутри партиции, поэтому ключ сообщения выбирают по сущности, например
user_id. Консьюмеров в группе больше, чем партиций, держать бессмысленно: лишние простаивают; - гарантии: продюсер с
acks=allи идемпотентностью, консьюмер с коммитом офсета после обработки. Это at-least-once, значит обработчик обязан быть идемпотентным: уникальный ключ в базе или таблица обработанных сообщений; - ошибки: ретраи с задержкой и отдельный топик для «ядовитых» сообщений (DLQ), чтобы одно битое сообщение не стопорило партицию;
- эксплуатация: мониторинг consumer lag в Prometheus и Grafana, поведение при ребалансировке, graceful shutdown через
signal.NotifyContext.
Если с Kafka не работали, скажите прямо и расскажите про похожую задачу на RabbitMQ, NATS или очереди в PostgreSQL. Затем покажите, что понимаете отличие: Kafka это лог с хранением и повторным чтением, а не очередь, из которой сообщение удаляется после доставки.
Где спотыкаются
Коммитят офсет до обработки, не понимая, что при падении сообщение потеряется. В kafka-go это частая ловушка: ReadMessage с GroupID коммитит сам, для ручного контроля нужны FetchMessage и CommitMessages.
Обещают exactly-once «из коробки». Транзакции Kafka покрывают цепочку из топика в топик, а запись во внешнюю базу всё равно требует идемпотентности на вашей стороне.
Называют ZooKeeper обязательной частью кластера. Современные версии Kafka работают в режиме KRaft без него.