API производителя Kafka - onCompletion - PullRequest
0 голосов
/ 18 января 2019

Попытка понять API производителя Java. Что означает завершение? Помоги мне понять за то же самое.

Ссылка: https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html

ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("the-topic", key, value);
 producer.send(myRecord,
               new Callback() {
                   public void onCompletion(RecordMetadata metadata, Exception e) {
                       if(e != null) {
                          e.printStackTrace();
                       } else {
                          System.out.println("The offset of the record we just sent is: " + metadata.offset());
                       }
                   }
               });

1 Ответ

0 голосов
/ 19 января 2019

В методе

producer.send(ProducerRecord<K,V> record, new Callback() {
                   public void onCompletion(RecordMetadata metadata, Exception e) {...}
  });

обратный вызов вызывается после подтверждения отправки.Обратный вызов выполняется в фоновом потоке ввода-вывода, поэтому он должен быть быстрым (не блокировать его)

По умолчанию отправка выполняется асинхронно, и этот метод немедленно возвращается после сохранения записи в буфере.записей, ожидающих отправки.Это позволяет отправлять много записей параллельно, не блокируя ожидание ответа после каждой из них.

Send возвращает RecordMetadata, который указывает раздел, куда отправляется запись, назначенное ей смещение и временную метку.

Это асинхронный подход, в то время как вы можете сделать то же самое, используя синхронный способ:

producer.send(record).get();

...