ОШИБКА производителя Kafka с использованием "security.protocol" - PullRequest
2 голосов
/ 12 февраля 2020

У меня есть кластер Kerberized с 2 брокерами Kafka и 3 узлами Zookeeper. У меня есть Java локальное приложение (использующее kafka-client 2.4.0), которое должно создавать и читать сообщения из тем в брокерах Kafka. Во входных данных на виртуальной машине я дал:

-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.

Что мне делать?

PS "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"; };
...