2016-10-22 4 views
2

Я на самом деле работаю над настройкой простой аутентификации Kafka с использованием SASL Plain Text и добавлением авторизации ACL. Но у меня проблема, когда я пытаюсь использовать данные.Kafka TOPIC_AUTHORIZATION_FAILED

[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version : 0.10.0.0 
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId : b8642491e78c5a13 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 1 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 2 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 3 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 4 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 5 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 6 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 7 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 8 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 9 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 
[main] WARN org.apache.kafka.clients.NetworkClient - Error while fetching metadata with correlation id 10 : {test-topic=TOPIC_AUTHORIZATION_FAILED} 

Затем вы можете увидеть мои конфигурационные файлы.

server.properties

listeners=SASL_PLAINTEXT://localhost:9092 
security.inter.broker.protocol=SASL_PLAINTEXT 
sasl.mechanism.inter.broker.protocol=PLAIN 
sasl.enabled.mechanisms=PLAIN 
broker.id=0 
num.network.threads=3 
num.io.threads=8 
socket.send.buffer.bytes=102400 
socket.receive.buffer.bytes=102400 
socket.request.max.bytes=104857600 
log.dirs=/tmp/kafka-logs 
num.partitions=1 
num.recovery.threads.per.data.dir=1 
log.retention.hours=168 
log.segment.bytes=1073741824 
log.retention.check.interval.ms=300000 
zookeeper.connect=localhost:2181 
zookeeper.connection.timeout.ms=6000 
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 

producer.properties

security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN 
bootstrap.servers=localhost:9092 
compression.type=none 

consumer.properties

security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN 
zookeeper.connect=127.0.0.1:2181 
zookeeper.connection.timeout.ms=6000 
group.id=test-consumer-group 

kafka_server_jaas.conf

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

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

переменная среды:

export KAFKA_OPTS="-Djava.security.auth.login.config=/home/user/kafka_2.10-0.10.0.1/kafka_server_jaas.conf" 

Команды

Набор ACL:

bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation All --group test-consumer-group --topic test-topic 

начало Кафка Сервер:

./bin/kafka-server-start.sh config/server.properties 

Start Производитель:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic --producer.config=config/producer.properties 

Start Потребитель:

bin/kafka-console-consumer.sh --new-consumer --zookeeper localhost:2181 --topic test-topic --from-beginning --consumer.config=config/consumer.properties --bootstrap-server=localhost:9092 

Когда я пытаюсь запустить потребителя, у меня есть вопрос выше. Кроме того, в журналах kafka у меня есть следующее:

[2016-10-22 20:17:14,091] ERROR [KafkaApi-0] Error when handling request {group_id=test-consumer-group} (kafka.server.KafkaApis) 
kafka.admin.AdminOperationException: replication factor: 3 larger than available brokers: 1 
    at kafka.admin.AdminUtils$.assignReplicasToBrokers(AdminUtils.scala:117) 
    at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:403) 
    at kafka.server.KafkaApis.kafka$server$KafkaApis$$createTopic(KafkaApis.scala:629) 
    at kafka.server.KafkaApis.kafka$server$KafkaApis$$createGroupMetadataTopic(KafkaApis.scala:651) 
    at kafka.server.KafkaApis$$anonfun$getOrCreateGroupMetadataTopic$1.apply(KafkaApis.scala:657) 
    at kafka.server.KafkaApis$$anonfun$getOrCreateGroupMetadataTopic$1.apply(KafkaApis.scala:657) 
    at scala.Option.getOrElse(Option.scala:121) 
    at kafka.server.KafkaApis.getOrCreateGroupMetadataTopic(KafkaApis.scala:657) 
    at kafka.server.KafkaApis.handleGroupCoordinatorRequest(KafkaApis.scala:818) 
    at kafka.server.KafkaApis.handle(KafkaApis.scala:86) 
    at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60) 
    at java.lang.Thread.run(Thread.java:745) 

Как это исправить?

+0

Привет, Я думаю, вы пытаетесь для доступа к кластеру с несколькими брокерами. но конфигурация (server.properties) просто создает одного брокера. проверьте свой код приложения. если вы хотите создать кластер брокеров (3), создайте три разных файла конфигурации, например server-1.properties, server-2.properties и server-3.properties, и определите три брокера. – Kris

+0

Привет, я не пытаюсь получить доступ к кластеру с несколькими брокерами. Я уже проверил свой конфиг, я также не хочу создавать кластер с несколькими брокерами. –

+0

Не могли бы вы разместить свой код приложения, где вы создаете свои темы? – Kris

ответ

0

Проблема устранена путем отделения клиента jaas и сервера jaas.

kafka_server_jaas.conf

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

kafka_client_jaas.conf

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

На том же терминале, экспорт JAAS файловый сервер конф и начать Кафка брокера:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/user/kafka_2.10-0.10.0.1/kafka_server_jaas.conf" 
$ ./bin/kafka-server-start.sh config/server.properties 

На клиентском терминале, экспорт клиента JAAS файл конф и начать потребитель:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/user/kafka_2.10-0.10.0.1/kafka_client_jaas.conf" 
$ ./bin/kafka-console-consumer.sh --new-consumer --zookeeper localhost:2181 --topic test-topic --from-beginning --consumer.config=config/consumer.properties --bootstrap-server=localhost:9092 

Если вы хотите произвести, сделать это на другом окне терминала:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/user/kafka_2.10-0.10.0.1/kafka_client_jaas.conf" 
$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic --producer.config=config/producer.properties 
0

Кажется, вы создали тему с коэффициентом репликации 3, но у вас только 1 брокер работает. Попробуйте создать тему с параметром «-replication-1». Вы также можете изменить коэффициент репликации по умолчанию на 1 (default.replication.factor в config/server.properties), если вы автоматически создаете темы.

+0

Спасибо за ответ, но я создал тему вручную с коэффициентом репликации 1. У меня все еще была такая же проблема. –

+0

Какая ошибка вы видите в новой теме? –

+0

У меня нет проблем с созданием темы, но у меня все еще есть такая же проблема на терминале, который запускает сервер kafka. kafka.admin.AdminOperationException: коэффициент репликации: 3 больше доступных брокеров: 1 –

0

Я столкнулся с аналогичной проблемой с использованием списков ACL в Kafka v.0.10. Я нашел это обсуждение полезным. Особенно включение журнала авторизации для проверки того, что является входящим именем пользователя для запроса, и тем, что указано в ваших списках ACL.

Во-первых, проверьте, соответствует ли серверу администратору все необходимые разрешения. Директору сервера должно быть разрешено выполнять все типы авторизации для всех тем, групп, а также кластера. Лучше объявить администратором в суперпользователях в файле server.properties. Если это не решит проблему, вы можете включить журнал авторизации, чтобы узнать, какой образец изучается для какой операции.

Журнал авторизации может быть активирован путем изменения log4j.properties в папке config. В файле log4j.properties измените WARN на DEBUG и перезапустите kafka-серверы.

log4j.logger.kafka.authorizer.logger=DEBUG, authorizerAppender 

Это помогло мне разобраться в моей проблеме. Надеюсь, это поможет.

PS: Созданные журналы авторизации будут очень длинными и потребляют много места. Поэтому не забудьте отключить это, когда закончите с отладкой.