我有一个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"; };