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

标签 java apache-kafka kafka-producer-api

我有下面提到的不同模型,我在其中创建 Kafka 生产者并调用不同的方法,但不确定对其进行编程的正确方法是什么,以便流程不应该中断并且性能不应该受到影响。请帮忙。

模型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();
}

模型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();
}

模型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();

模型 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();
}

模型 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();
}

型号 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();

最佳答案

Model 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();
    }

关于java - 创建 Kafka Producer 并调用方法 send()、flush() 和 close() 的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47832944/

相关文章:

java - 为什么这个 JSON Parsing 越来越高效了?

java - RPG游戏java中的消耗品设计

java - 摩尔斯电码翻译器(简单)

java - Neo4j Java 剩余绑定(bind) : NoClassDefFoundError

java - Apache kafka 高级消费者 - 理解

performance - 端到端测试大数据管道的工具?

apache-spark - Spark Streaming 崩溃到 Kafka Ran out of messages before reaching ending offset exception

apache-kafka - 为 kafka 在线添加分区或代理是否安全?

apache-kafka - 获取元数据 kafka {test=LEADER_NOT_AVAILABLE} 时出错?

java - 如何使用 Producer 将自定义对象发送到 Kafka Topic