2017-08-18 1 views
3

Ich habe ein Problem mit der Kommunikation mit Kafka mit sasl mit Konsolen-Skripten gesichert. Kafka ist mit sasl gesichert, Listener ist SASL_PLAINTEXT und Mechanismus ist PLAIN.Kafka "Login-Modul nicht in JAAS-Konfiguration angegeben"

Was ich tat: Ich habe versucht, einige Daten Auflistung eines von kafka Skripten:

bin/kafka-consumer-groups.sh --bootstrap-Server (Adresse) --list

Allerdings bekomme ich "WARN Bootstrap Broker (Adresse) getrennt (org.apache.kafka.clients.NetworkClient)" und Befehl fehlschlägt, was verständlich ist, weil es mit sasl gesichert ist.

Also habe ich versucht, Client Benutzername/Passwort zu diesem Befehl hinzuzufügen. Zuerst habe ich versucht, kafka-console-consumer Skript ausführen, habe ich --command-config, um die erforderliche Datei hinzuzufügen. Ich fand schnell heraus, dass ich die JAAS-Datei nicht direkt hinzufügen konnte und dass ich die .properties-Datei verwenden musste, also tat ich es.

Meine Properties-Datei (bedenken Sie, dass Klammern "zensiert" Daten zeigen, kann ich nicht alle realen Daten auszureizen):

bootstrap.servers=(address) 
zookeeper.connect=127.0.0.1:2181 
zookeeper.connection.timeout.ms=6000 
sasl.jaas.config=(path)/consumer_jaas.conf 
security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN 
group.id=(group) 

Meine jaas Datei:

Diese jaas
KafkaClient { 
    org.apache.kafka.common.security.plain.PlainLoginModule required 
    username=(username) 
    password=(password); 
}; 

Datei funktioniert in meinen Standard-Java-Anwendungen.

aber wenn ich versuche, entweder kafka-Consumer-Gruppen Skript oder kafka-console-Verbraucher zu laufen, bekomme ich diesen Fehler:

Exception in thread "main" org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: Login module not specified in JAAS config 
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:94) 
at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:93) 
at org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:51) 
at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:84) 
at kafka.admin.AdminClient$.create(AdminClient.scala:229) 
at kafka.admin.AdminClient$.create(AdminClient.scala:223) 
at kafka.admin.AdminClient$.create(AdminClient.scala:221) 
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.createAdminClient(ConsumerGroupCommand.scala:454) 
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.<init>(ConsumerGroupCommand.scala:389) 
at kafka.admin.ConsumerGroupCommand$.main(ConsumerGroupCommand.scala:65) 
at kafka.admin.ConsumerGroupCommand.main(ConsumerGroupCommand.scala) 
Caused by: java.lang.IllegalArgumentException: Login module not specified in JAAS config 
at org.apache.kafka.common.security.JaasConfig.<init>(JaasConfig.java:68) 
at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:59) 
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:85) 

Diese jaas-Datei ist eine direkte Kopie einer Datei, die Ich benutze in Java-App, die mit Kafka kommuniziert und es funktioniert, aber hier, mit Konsolen-Tools, es funktioniert einfach nicht. Ich habe versucht, nach einer Lösung zu suchen, aber ich kann nichts Nützliches finden.

Kann mir jemand dabei helfen?

Antwort

4

Es gibt 2 Möglichkeiten, den Kafka-Clients die JAAS-Konfiguration bereitzustellen.

  • Über die Client-Eigenschaft: sasl.jaas.config. In diesem Fall stellen Sie ihn auf den tatsächlichen JAAS-Konfigurationseintrag ein. Zum Beispiel der Konfigurationsdatei wird:

    bootstrap.servers=(address) 
    zookeeper.connect=127.0.0.1:2181 
    zookeeper.connection.timeout.ms=6000 
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="(username)" password="(password)"; 
    security.protocol=SASL_PLAINTEXT 
    sasl.mechanism=PLAIN 
    group.id=(group) 
    

    Wie Sie bereits herausgefunden haben, können Sie --command-config können eine Eigenschaft kafka-consumer-groups.sh Datei zu übergeben.

  • Über die Java-Eigenschaft: java.security.auth.login.config. In diesem Fall legen Sie den Pfad Ihrer JAAS-Datei fest. Auch wenn Sie es in KAFKA_OPTS setzen, wird kafka-consumer-groups.sh es automatisch abholen.

    export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf" 
    
+0

Ich habe jaas Konfigurationseintrag direkt in .properties-Datei und es funktionierte. Jetzt kann ich diese Skripte ohne Fehler verwenden. Ich weiß nicht, warum es Probleme mit der externen Datei hatte. Vielen Dank! – Tomasz

+1

Wenn Sie sasl.jaas.config verwenden, können Sie nur den JAAS-Konfigurationseintrag festlegen, der mit dem Pfad zu einer Datei nicht funktioniert. Im Gegensatz zur Java-Eigenschaft funktioniert es nur mit dem Pfad zu einer Datei. –