Sobes.tech
Назад к вопросам
Junior — Middle
62

Какими методами ты знаешь реализовать передачу сообщений в Kafka, и в чем их особенности?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Java для передачи сообщений в Kafka обычно используют KafkaProducer. Основные методы отправки сообщений:

  1. send(ProducerRecord<K, V> record) — асинхронная отправка сообщения. Возвращает Future с результатом отправки. Позволяет не блокировать поток, но нужно обрабатывать возможные ошибки через callback.

  2. send(ProducerRecord<K, V> record, Callback callback) — асинхронная отправка с callback, который вызывается при завершении отправки (успех или ошибка).

  3. flush() — принудительно отправляет все накопленные сообщения, ожидая их подтверждения.

  4. close() — закрывает продюсер, отправляя все оставшиеся сообщения.

Особенности:

  • Асинхронная отправка повышает производительность, но требует обработки ошибок в callback.
  • Можно настроить параметры подтверждения (acks) для контроля надежности доставки.
  • Для синхронной отправки можно вызвать get() у Future, но это блокирует поток.

Пример отправки с callback:

KafkaProducer<String, String> producer = new KafkaProducer<>(props);
ProducerRecord<String, String> record = new ProducerRecord<>("topic", "key", "value");

producer.send(record, (metadata, exception) -> {
    if (exception != null) {
        System.err.println("Ошибка отправки: " + exception.getMessage());
    } else {
        System.out.println("Сообщение отправлено в партицию " + metadata.partition() + " с offset " + metadata.offset());
    }
});

producer.flush();
producer.close();