Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 新版本的卡夫卡制作人是否仍有;生产商。类型“;?_Java_Apache Kafka_Producer - Fatal编程技术网

Java 新版本的卡夫卡制作人是否仍有;生产商。类型“;?

Java 新版本的卡夫卡制作人是否仍有;生产商。类型“;?,java,apache-kafka,producer,Java,Apache Kafka,Producer,旧版本的文档称这是一个基本属性 新版本的文档根本没有提到它 新版本的卡夫卡制作人是否仍有制作人。键入 或者,新的制作人总是异步的,我应该调用future.get()使其同步?为什么要使发送()同步 这是一个kafka特性,用于批处理消息以获得更好的吞吐量 异步发送 批处理是提高效率的主要驱动因素之一,为了实现批处理,Kafka生产者将尝试在内存中积累数据,并在单个请求中发送更大的批。批处理可以配置为累积不超过固定数量的消息,并且等待时间不超过某个固定的延迟范围(例如64k或10毫秒)。这允许累积

旧版本的文档称这是一个基本属性

新版本的文档根本没有提到它

新版本的卡夫卡制作人是否仍有
制作人。键入


或者,新的制作人总是
异步的
,我应该调用
future.get()
使其
同步

为什么要使
发送()
同步

这是一个kafka特性,用于批处理消息以获得更好的吞吐量

异步发送

批处理是提高效率的主要驱动因素之一,为了实现批处理,Kafka生产者将尝试在内存中积累数据,并在单个请求中发送更大的批。批处理可以配置为累积不超过固定数量的消息,并且等待时间不超过某个固定的延迟范围(例如64k或10毫秒)。这允许累积更多的字节来发送,并且在服务器上很少进行较大的I/O操作。这种缓冲是可配置的,它提供了一种机制,可以权衡少量的额外延迟以获得更好的吞吐量

由于api仅支持异步方法,因此无法执行发送同步,但可以指定一些配置来执行周围的工作

您可以将batch.size设置为0。在这种情况下,消息bacthing被禁用

但是,我认为您应该保留batch.size默认值,并将linger.ms设置为0(这也是默认值)。在这种情况下,如果许多消息同时出现,它们将立即在一次发送中批处理

生产者将在请求传输之间到达的任何记录组合到一个批处理请求中。通常,只有在记录到达的速度快于发送速度时,才会在加载时发生这种情况

如果您想确保消息成功发送和持久化,您可以将确认设置为-1或1,并将重试设置为3(例如)


有关producer配置的更多信息,您可以参考新的producer始终是异步的,您应该调用future.get()使其同步。如果像添加future.get()这样简单的东西提供了基本相同的功能,那么创建两个API方法就不值得了

从这里的send()文档中

因为send调用是异步的,所以它返回 将分配给此记录的RecordMetadata。在上调用get() 此future将阻塞,直到相关请求完成,然后重试 返回记录的元数据或引发 发送记录时发生

如果要模拟一个简单的阻塞调用,可以调用get() 方法:

byte[] key = "key".getBytes();
byte[] value = "value".getBytes();  
ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("my-topic", key, value);
producer.send(record).get();
byte[]key=“key”.getBytes();
byte[]value=“value”。getBytes();
ProducerRecord记录=新的ProducerRecord(“我的主题”、键、值);
producer.send(record.get();

我相信同步发送在某些情况下是有用的。或者为什么他们在过去提供了它?例如,我想确保我的消息是持久的0.11 Producer javadocs在这里,实际上我已经读过了。我只是想知道一些“官方”的事情。