Неожиданный запрос Kafka типа METADATA во время рукопожатия SASL - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь подключить клиента Kafka Java к брокеру Kafka с помощью SASL Plain. Но когда я пытаюсь отправить сообщение от источника, сервер Kafka регистрирует следующую ошибку:

[2020-04-30 14:48:14,955] INFO [SocketServer brokerId=0] Failed authentication with /127.0.0.1 (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)

Судя по всему, производитель пытается отправить запрос метаданных до подтверждения SASL. Как я могу выполнить рукопожатие перед отправкой сообщения?

Ниже приведен мой файл kafka_server_jaas.conf, который используется для Kafka Server.

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret";
};

Client {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret";
};

Ниже приведен мой файл zookeeper_jaas.conf, который используется для зоопарка:

Server {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret";
};

У моего Java производителя я установил следующие свойства:

Properties properties = new Properties();
properties.put("bootstrap.servers", "localhost:9092");
properties.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin_secret\"");
properties.put("sasl.mechanisms", "PLAIN");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer kafkaProducer = new KafkaProducer(properties);

Что-то не так я делаю?

1 Ответ

1 голос
/ 30 апреля 2020

Вам необходимо указать security.protocol, в противном случае по умолчанию клиенты Kafka не используют SASL.

В свойствах вашего клиента добавьте:

properties.put("security.protocol", "SASL_SSL");

Существует также SASL_PLAINTEXT, но не рекомендуется использовать механизм PLAIN вместо SASL_PLAINTEXT, поскольку пароль будет заменен открытым текстом.

...