kafka java生产者停留在制作消息

时间:2016-08-28 20:23:30

标签: java apache-kafka kafka-producer-api apache-zookeeper

我正在使用java api实现apache kafka producer。 Apache Kafka安装在localhost上。 Zookeeper也在运行,但仍然生成了producer.send()函数,发送消息并且消息未发布。

我已经创建了#34;快速消息"主题。

以下是代码。

package com.hsahu.kafka.producer;

import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

public class KafkaProducerExample {
public static void main(String[] args) {

    Properties props = new Properties();

    props.put("bootstrap.servers", "localhost:9092");
    props.put("acks", "all");
    props.put("retries", 0);
    props.put("batch.size", 16384);
    props.put("linger.ms", 0);
    props.put("buffer.memory", 33554432);
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

    KafkaProducer<String, String> producer = new KafkaProducer<>(props);

    try {
        producer.send(new ProducerRecord<String, String>("fast-messages", "This is a dummy message"));
    } catch(Exception ex) {
        System.out.println(ex);
    }

    System.out.println("message publisher");

    producer.close();
}

}

我该怎么办?是我的代码错误或任何属性设置不正确或丢失?

4 个答案:

答案 0 :(得分:4)

代码中没有任何问题。只有api版本和kafka服务器版本不匹配。所以我只更正了api版本,现在制作人正在工作。

答案 1 :(得分:1)

以下测试

如果版本高于0.9,则需要配置&#34; advertised.host.name&#34;在经纪人

答案 2 :(得分:0)

您可以尝试使用producer.flush()而不是producer.close()。 Flush()块直到消息被发送到kafka经纪人???除了那个我没有看到任何奇怪的东西..

答案 3 :(得分:0)

就我而言,这是因为未创建主题。 我搞混了生产者的 bootstrap-servers 配置(使用了不同的env,没有这样的主题)。 修复它起作用后。