Wir haben gerade ein Upgrade von CDH 5.3.6 auf 5.10.0 durchgeführt und Fehler beim Schreiben von Kafka-Themen bekommen. Wir haben die Standardeinstellungen für alles, keine SSL- oder Kerberos-Authentifizierung aktiviert. Wenn ich den Konsolenproduzenten verwende, um in eines meiner Themen zu schreiben, erhalte ich folgende Fehlermeldung:Kafka auf Cloudera - test = TOPIC_AUTHORIZATION_FAILED
/usr/bin/kafka-konsolenerzeuger --broker-list = myhost1.dev.com: 9092, myhost2.dev. com: 9092 --topic Test
17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka version : 0.10.0-kafka-2.1.0
17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka commitId : unknown
x
17/03/06 21:00:59 WARN clients.NetworkClient: Error while fetching metadata with correlation id 0 : {test=TOPIC_AUTHORIZATION_FAILED}
Mit Blick auf/var/log/kafka/sehe ich ein Bündel von diesen Ausnahmen:
2017-03-06 21:00:26,964 WARN org.apache.sentry.provider.common.HadoopGroupMappingService: Unable to obtain groups for ANONYMOUS
java.io.IOException: No groups found for user ANONYMOUS
at org.apache.hadoop.security.Groups.noGroupsForUser(Groups.java:190)
at org.apache.hadoop.security.Groups.getGroups(Groups.java:210)
at org.apache.sentry.provider.common.HadoopGroupMappingService.getGroups(HadoopGroupMappingService.java:60)
at org.apache.sentry.provider.common.ResourceAuthorizationProvider.getGroups(ResourceAuthorizationProvider.java:167)
at org.apache.sentry.provider.common.ResourceAuthorizationProvider.doHasAccess(ResourceAuthorizationProvider.java:97)
at org.apache.sentry.provider.common.ResourceAuthorizationProvider.hasAccess(ResourceAuthorizationProvider.java:91)
at org.apache.sentry.kafka.binding.KafkaAuthBinding.authorize(KafkaAuthBinding.java:212)
at org.apache.sentry.kafka.authorizer.SentryKafkaAuthorizer.authorize(SentryKafkaAuthorizer.java:63)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321)
at scala.Option.map(Option.scala:146)
at kafka.server.KafkaApis.kafka$server$KafkaApis$$authorize(KafkaApis.scala:321)
at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702)
at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702)
at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314)
at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314)
at scala.collection.immutable.Set$Set1.foreach(Set.scala:94)
at scala.collection.TraversableLike$class.partition(TraversableLike.scala:314)
at scala.collection.AbstractTraversable.partition(Traversable.scala:104)
at kafka.server.KafkaApis.handleTopicMetadataRequest(KafkaApis.scala:702)
at kafka.server.KafkaApis.handle(KafkaApis.scala:79)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
at java.lang.Thread.run(Thread.java:745)
ich für eine Lösung dieses Problems gesucht haben, aber sind bis jetzt leer ausgegangen. Muss ich den ANONYMOUS Benutzer irgendwo einigen Gruppen zuweisen? Ich konnte Nachrichten zu meinen Themen in CDH 5.3.6 schreiben, aber es scheint, dass beim Upgrade etwas schief gelaufen ist.
Nur versuchen, das helloWorld/Quickstart-Beispiel nach dem Upgrade auf CDH 5.10.0 wieder auf unserem DEV Kafka zu installieren.
----------------- temporäre Umgehungslösung ---
In cloudera Manager 5.10 gibt es eine super.users Eigenschaft in der kafka Konfiguration. Das Hinzufügen von ANONYMOUS zu dieser Liste erlaubte mir, von meinen Themen zu produzieren und zu konsumieren.
Ich hatte bereits versucht, dies in /opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.properties, die keine Wirkung hatte. Also muss Cloudera diese Werte anderswo verwalten.
Können Sie den Wert überprüfen, den Sie für _authorizer.class.name_ bitte eingestellt haben? Wenn Sie kein Kerberos oder SSL konfiguriert haben, können Sie immer noch ACLs erzwingen, wenn hier etwas festgelegt ist. Jeder, der sich anmeldet, wird als "ANONYM" authentifiziert, was Sie in Ihrem Protokoll sehen können. –
Ich habe /opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.properties geändert, um diese Zeile zu haben: authorizer.class.name = kafka.security. auth.SimpleAclAuthorizer Aber es schien nicht wichtig zu sein und ich war mir nicht einmal sicher, ob das die richtige Datei war oder wie man die Änderung überprüfen konnte. – medloh
Ja, das ist die Ursache dafür (nicht sicher über die Datei, aber scheint zu passen). Mit dieser Zeile sagst du Kafka, ACLs auf alle Verbindungsversuche anzuwenden - alle gegen "ANONYM".Ich würde empfehlen, diese Zeile zu entfernen und alles sollte funktionieren. Alternativ kannst du ANONYMOUS als Superuser in der Config einstellen, was den gleichen Effekt haben soll, aber keine zusätzliche Sicherheit bietet, also ist es nicht wirklich nützlich imo. –