Java 创建Kafka Producer并调用send()、flush()和close()方法的正确顺序是什么?
我有下面提到的不同模型,我创建了卡夫卡制作人并调用了不同的方法,但不确定什么是正确的编程方法,这样流就不会中断,性能就不会受到影响。请帮忙 模式1:Java 创建Kafka Producer并调用send()、flush()和close()方法的正确顺序是什么?,java,apache-kafka,kafka-producer-api,Java,Apache Kafka,Kafka Producer Api,我有下面提到的不同模型,我创建了卡夫卡制作人并调用了不同的方法,但不确定什么是正确的编程方法,这样流就不会中断,性能就不会受到影响。请帮忙 模式1: for(int i=1; i < 100; i++){ Producer<String, String> producer = new KafkaProducer<String, String>(props); ProducerRecord<String, String> data = n
for(int i=1; i < 100; i++){
Producer<String, String> producer = new KafkaProducer<String, String>(props);
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
producer.close();
}
for(int i=1;i<100;i++){
制作人=新卡夫卡制作人(道具);
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
producer.close();
}
模式2:
Producer<String, String> producer = new KafkaProducer<String, String>(props);
for(int i=1; i < 100; i++) {
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
producer.close();
}
Producer=新卡夫卡制作人(道具);
对于(int i=1;i<100;i++){
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
producer.close();
}
模式3:
Producer<String, String> producer = new KafkaProducer<String, String>(props);
for(int i=1; i < 100; i++){
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
}
producer.close();
Producer=新卡夫卡制作人(道具);
对于(int i=1;i<100;i++){
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
}
producer.close();
模式4:
for(int i=1; i < 100; i++){
Producer<String, String> producer = new KafkaProducer<String, String>(props);
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
producer.flush();
producer.close();
}
for(int i=1;i<100;i++){
制作人=新卡夫卡制作人(道具);
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
producer.flush();
producer.close();
}
模式5:
Producer<String, String> producer = new KafkaProducer<String, String>(props);
for(int i=1; i < 100; i++){
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
producer.flush();
producer.close();
}
Producer=新卡夫卡制作人(道具);
对于(int i=1;i<100;i++){
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
producer.flush();
producer.close();
}
模式6:
Producer<String, String> producer = new KafkaProducer<String, String>(props);
for(int i=1; i < 100; i++){
ProducerRecord<String, String> data = new ProducerRecord<String, String>(
topicName,
String.valueOf(i)
);
producer.send(data);
producer.flush();
}
producer.close();
Producer=新卡夫卡制作人(道具);
对于(int i=1;i<100;i++){
产品记录数据=新产品记录(
主题名,
String.valueOf(i)
);
生产者。发送(数据);
producer.flush();
}
producer.close();
型号3似乎应该是正确的,有以下更改
Producer<String, String> producer = new KafkaProducer<String, String>(props);
try {
for (int i = 1; i < 100; i++) {
ProducerRecord<String, String> data = new ProducerRecord<String, String>(topicName, String.valueOf(i));
producer.send(data);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.close();
}
Producer=新卡夫卡制作人(道具);
试一试{
对于(int i=1;i<100;i++){
ProducerRecord数据=新的ProducerRecord(topicName,String.valueOf(i));
生产者。发送(数据);
}
}捕获(例外e){
e、 printStackTrace();
}最后{
producer.close();
}
型号3似乎应该是正确的,有以下更改
Producer<String, String> producer = new KafkaProducer<String, String>(props);
try {
for (int i = 1; i < 100; i++) {
ProducerRecord<String, String> data = new ProducerRecord<String, String>(topicName, String.valueOf(i));
producer.send(data);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.close();
}
Producer=新卡夫卡制作人(道具);
试一试{
对于(int i=1;i<100;i++){
ProducerRecord数据=新的ProducerRecord(topicName,String.valueOf(i));
生产者。发送(数据);
}
}捕获(例外e){
e、 printStackTrace();
}最后{
producer.close();
}
您可以使用以下示例:
Properties props = new Properties();
props.put("batch.size", 16384);
props.put("buffer.memory", 33554432);
Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 100; i++)
producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i)));
producer.close();
Properties=newproperties();
道具放置(“批量大小”,16384);
props.put(“buffer.memory”,33554432);
制作人=新卡夫卡制作人(道具);
对于(int i=0;i<100;i++)
producer.send(新ProducerRecord(“我的主题”,Integer.toString(i),Integer.toString(i));
producer.close();
众所周知,send()方法是异步的。调用时,它将记录添加到挂起记录发送的缓冲区中,并立即返回。这使制作人能够将单个记录批量处理在一起,以提高效率
我们可以将buffer.memory或batch.size设置为自动刷新您可以使用以下示例:
Properties props = new Properties();
props.put("batch.size", 16384);
props.put("buffer.memory", 33554432);
Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 100; i++)
producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i)));
producer.close();
Properties=newproperties();
道具放置(“批量大小”,16384);
props.put(“buffer.memory”,33554432);
制作人=新卡夫卡制作人(道具);
对于(int i=0;i<100;i++)
producer.send(新ProducerRecord(“我的主题”,Integer.toString(i),Integer.toString(i));
producer.close();
众所周知,send()方法是异步的。调用时,它将记录添加到挂起记录发送的缓冲区中,并立即返回。这使制作人能够将单个记录批量处理在一起,以提高效率
我们可以将buffer.memory或batch.size设置为自动刷新,这样流就不会中断,性能也不会受到影响。“你必须试着找到最符合你的评估标准的模型。@ElliottFrisch试过我在这里展示的所有模型,很少有模型正常运行,其余的模型返回了非法状态异常,所以我脑子里产生了一个问题来澄清这个疑问。”。此外,我不确定运行平稳的模型是否会有任何性能影响,因为我只处理有限的可用数据量。因此,流不应中断,性能不应受到影响,我们也不应受到影响。“你必须试着找到最符合你的评估标准的模型。@ElliottFrisch试过我在这里展示的所有模型,很少有模型正常运行,其余的模型返回了非法状态异常,所以我脑子里产生了一个问题来澄清这个疑问。”。另外,我不确定运行平稳的模型是否会有任何性能影响,因为我只处理有限的可用数据。