Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 创建Kafka Producer并调用send()、flush()和close()方法的正确顺序是什么?_Java_Apache Kafka_Kafka Producer Api - Fatal编程技术网

Java 创建Kafka Producer并调用send()、flush()和close()方法的正确顺序是什么?

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

我有下面提到的不同模型,我创建了卡夫卡制作人并调用了不同的方法,但不确定什么是正确的编程方法,这样流就不会中断,性能就不会受到影响。请帮忙

模式1:

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试过我在这里展示的所有模型,很少有模型正常运行,其余的模型返回了非法状态异常,所以我脑子里产生了一个问题来澄清这个疑问。”。另外,我不确定运行平稳的模型是否会有任何性能影响,因为我只处理有限的可用数据。