Вопрос или проблема
Я установил кластер Kafka с использованием протокола KRAFT, и во время аутентификации ACL я столкнулся с проблемой ‘Не удалось настроить SaslClientAuthenticator’. Ниже представлена моя конфигурация.
server.properties
node.id=1
[email protected]:9093,[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.1.41:9092
controller.listener.names=CONTROLLER
process.roles=broker,controller
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
super.users=User:kafkaadmin
allow.everyone.if.no.acl.found=true
listener.security.protocol.map=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:SASL_PLAINTEXT
kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="kafkaadmin"
password="kafkaadmin123456"
serviceName="kafka";
};
Ниже приведено сообщение об ошибке.
java.io.IOException: Канал не может быть создан для сокета java.nio.channels.SocketChannel[closed]
at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:352)
at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329)
at org.apache.kafka.common.network.Selector.connect(Selector.java:256)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:1072)
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:320)
at org.apache.kafka.server.util.InterBrokerSendThread.sendRequests(InterBrokerSendThread.java:145)
at org.apache.kafka.server.util.InterBrokerSendThread.pollOnce(InterBrokerSendThread.java:108)
at org.apache.kafka.server.util.InterBrokerSendThread.doWork(InterBrokerSendThread.java:136)
at org.apache.kafka.server.util.ShutdownableThread.run(ShutdownableThread.java:135)
Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.errors.SaslAuthenticationException: Не удалось настроить SaslClientAuthenticator
at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:243)
at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:340)
... 8 more
Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Не удалось настроить SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Невозможно определить главный объект из субъекта, это может быть временная ошибка из-за повторной аутентификации Kerberos
at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.firstPrincipal(SaslClientAuthenticator.java:633)
at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.<init>(SaslClientAuthenticator.java:203)
at org.apache.kafka.common.network.SaslChannelBuilder.buildClientAuthenticator(SaslChannelBuilder.java:289)
at org.apache.kafka.common.network.SaslChannelBuilder.lambda$buildChannel$1(SaslChannelBuilder.java:229)
at org.apache.kafka.common.network.KafkaChannel.<init>(KafkaChannel.java:143)
at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:237)
at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:340)
at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329)
at org.apache.kafka.common.network.Selector.connect(Selector.java:256)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:1072)
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:320)
at org.apache.kafka.server.util.InterBrokerSendThread.sendRequests(InterBrokerSendThread.java:145)
at org.apache.kafka.server.util.InterBrokerSendThread.pollOnce(InterBrokerSendThread.java:108)
at org.apache.kafka.server.util.InterBrokerSendThread.doWork(InterBrokerSendThread.java:136)
at org.apache.kafka.server.util.ShutdownableThread.run(ShutdownableThread.java:135)
Как я могу это исправить? Спасибо.
Ответ или решение
Решение проблем с аутентификацией ACL в кластере Kafka
Здравствуй, уважаемый читатель. Вы столкнулись с проблемами настройки аутентификации ACL в кластере Kafka, установленном с использованием протокола KRAFT. В этом ответе я подробно разберу вашу конфигурацию, ошибки и предложу возможные пути решения.
Анализ конфигурации
Файл server.properties:
node.id=1
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.1.41:9092
controller.listener.names=CONTROLLER
process.roles=broker,controller
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
super.users=User:kafkaadmin
allow.everyone.if.no.acl.found=true
listener.security.protocol.map=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:SASL_PLAINTEXT
JAAS конфигурация (kafka_server_jaas.conf):
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="kafkaadmin"
password="kafkaadmin123456"
serviceName="kafka";
};
Ошибка
Сообщение об ошибке:
Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Principal could not be determined from Subject
Эта ошибка указывает на то, что клиент не может получить правильный признак (Principal) для аутентификации. Это может происходить по нескольким причинам.
Возможные причины и решения
-
Неправильная конфигурация JAAS
Убедитесь, что файлkafka_server_jaas.conf
правильно загружен. Вы можете указать его местоположение через переменнуюKAFKA_OPTS
:export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"
-
Сбой аутентификации SCRAM
Убедитесь, что механизм аутентификацииSCRAM-SHA-512
правильно настроен на всех узлах кластера. Все участвует в аутентификации узлы должны иметь одинаковую конфигурацию. -
Некорректные учетные данные
Пересмотрите логин и пароль, указанные вkafka_server_jaas.conf
. Возможно, они могут содержать неявные символы или ошибки. -
Версия Kafka
Убедитесь, что вы используете последнюю стабильную версию Kafka. Некоторые проблемы с аутентификацией могут быть устранены в более новых версиях. -
Настройка сетевого взаимодействия
Убедитесь, что порты, указанные в вашей конфигурации, открыты и доступны между всеми узлами кластера. Используйте утилиты вродеtelnet
илиnc
для диагностики соединений. -
Логи и отладка
Проверьте логи Kafka на наличие более подробной информации об ошибках. Логи могут содержать подсказки о том, что конкретно идет неправильно в процессе аутентификации.
Заключение
Поиск проблем с аутентификацией может занять много времени, но систематический подход и прочное понимание архитектуры Kafka помогут вам вышеуказанными шагами устранить проблемы. Если все вышеперечисленное не работает, рассмотрите возможность обращения за поддержкой в сообществах разработчиков Kafka или на форумах, таких как Stack Overflow. Если у вас есть дополнительные вопросы, не стесняйтесь их задавать. Удачи в работе с вашим кластером Kafka!