apache-kafka - Kafka Producer API - onCompletion
问题描述
试图了解 Java 生产者 API。onCompletion 是什么意思?帮助我理解相同的。
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());
}
}
});
解决方案
在方法
producer.send(ProducerRecord<K,V> record, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {...}
});
确认发送后调用回调。回调在后台 I/O 线程中执行,因此它应该很快(不要阻塞它)
默认情况下,发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送许多记录,而不会阻塞等待每个记录之后的响应。
Send 返回 RecordMetadata,它指定记录发送到的分区、分配给它的偏移量和时间戳。
这是一种异步方法,而您可以使用同步方式执行相同操作:
producer.send(record).get();
推荐阅读
- python - Python在随机函数中打印行号
- android - 在android中使用房间来获取表格中的更改
- c - 表达式 c=a+++b 的输出是什么?如果 c 语言中 a=2,b=5...?
- python - Pyqt5 获取 QpushButton 相对于 Qwidget 的位置
- c# - Dotnet Core 3.1 - 更新到 3.1 并使用“HasDefaultValue”设置默认值似乎不存在
- google-chrome - 在 GTM 变量中获取 ID 值?
- intellij-idea - 如何在 Intellij Plugin 中格式化动态创建的 kotlin 文件
- c - 如何在 C 服务器中同步 HTTP 请求
- python - 在模板Django中使用包含数字作为范围的for循环
- python-3.x - 预期尺寸为 5,但得到形状为 (10000, 64, 173, 1) 的数组(GTZAN 数据集上的 CNN + LSTM)