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在这里,实际上我已经读过了。我只是想知道一些“官方”的事情。