oncompletion

oymdgrw7  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(210)

试图理解java生产者api。完成意味着什么?帮助我理解同样的道理。
参考文献: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());
                       }
                   }
               });
e4yzc0pl

e4yzc0pl1#

in方法

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

一旦确认发送,就会调用回调。回调在后台i/o线程中执行,因此应该很快(不要阻止它)
默认情况下,发送是异步的,一旦记录存储在等待发送的记录的缓冲区中,此方法将立即返回。这允许并行发送多个记录,而无需阻塞以等待每个记录之后的响应。
send返回recordmetadata,指定将记录发送到的分区、分配给它的偏移量和时间戳。
这是一种异步方法,而您可以使用同步方法执行相同的操作: producer.send(record).get();

相关问题