简单的kafkaProducer程序在Java中不起作用

时间:2018-04-16 20:09:32

标签: java apache-kafka

我无法让它发挥作用。我试图将一个简单的测试消息推送到kafka主题。以下是代码和错误

    Properties props = new Properties();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafkaBrokerfqdn:6667");
    props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");
    props.put(ProducerConfig.ACKS_CONFIG, "all");
    props.put(ProducerConfig.RETRIES_CONFIG, "3");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    props.put("java.security.auth.login.config", "kafka_client_jaas.conf");

    Producer<String, String> kProducer = new KafkaProducer<String, String>(props);
    kProducer.send(new ProducerRecord<String, String>("test_topic", "testMessage"));
    kProducer.close();

以下是我所面临的错误。我把jaas conf放在与jar相同的目录中。

Exception in thread "main" org.apache.kafka.common.KafkaException: Failed to construct kafka producer
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:338)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:188)
    at com.training.KProducer.main(KProducer.java:34)
Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.KafkaException: Jaas configuration not found
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:86)
    at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:71)
    at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:85)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:302)
    ... 2 more
Caused by: org.apache.kafka.common.KafkaException: Jaas configuration not found
    at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:299)
    at org.apache.kafka.common.security.kerberos.KerberosLogin.configure(KerberosLogin.java:103)
    at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:45)
    at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:68)
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:78)
    ... 5 more
Caused by: java.io.IOException: Could not find a 'KafkaClient' entry in this configuration.
    at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:50)
    at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:297)
    ... 9 more

1 个答案:

答案 0 :(得分:0)

java.security.auth.login.config是系统属性。您应该将它作为参数传递给生产者运行的JVM。

-Djava.security.auth.login.config=${CONFIG_HOME}/kafka_client_jaas.conf