卡夫卡生产者错误,使用“ security.protocol”

时间:2020-02-12 13:16:59

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

我有一个Kerberized集群,其中包含2个Kafka代理和3个Zookeeper节点。 我在本地有一个Java应用程序(使用kafka-client 2.4.0),该应用程序必须产生和读取来自Kafka代理中主题的消息。 在VM的输入中,我给出了:

-Djava.security.auth.login.config=/Users/mypath/kafka_client_jaas.conf

我还有一个本地的模式注册表(confluent),连接到集群。 要创建生产者,请设置以下选项:

    Properties producerProps = new Properties();
    producerProps.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");
    producerProps.put("sasl.kerberos.service.name", "kafka");
    producerProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, Constants.KAFKA_BROKERS);
    producerProps.put(ProducerConfig.CLIENT_ID_CONFIG, user);
    producerProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    producerProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
    producerProps.put(KafkaAvroSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://localhost:8081");

错误:

java.io.IOException: Configuration Error:
    row 5: expected [option key], found [null]
    at sun.security.provider.ConfigFile$Spi.<init>(ConfigFile.java:137)
    at sun.security.provider.ConfigFile.<init>(ConfigFile.java:102)

问题是由

引起的
producerProps.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");

没有这一行,应用程序会编译,但是我收到:

org.apache.kafka.common.errors.TimeoutException: Topic TEST not present in metadata after 60000 ms.

我该怎么办?

P.S。 “ kafka_client_jaas.conf”应该是正确的,因为我也将其与架构注册表一起使用并且可以正常工作。

kafka_client_jaas.conf:

KafkaClient { com.sun.security.auth.module.Krb5LoginModule required 
useKeyTab=true 
storeKey=true 
keyTab="/Users/path/kafka.service.keytab" \ 
principal="kafka/kafka-broker01.domain.xx@DOMAIN.XX"; };

0 个答案:

没有答案