Kafka Authentication Producer Unable to Connect Producer

26,290

Help came from the Kafka forum. See http://mail-archives.apache.org/mod_mbox/kafka-users/201609.mbox/%3CCAHX2Snk11vg7DXNVUr9oE97ikFSQUoT3kBLAxYymEDj7E14XrQ%40mail.gmail.com%3E

I had the credentials wrong. They were:

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

Instead of:

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

Also, the console consumer needs to be called in a certain. First the flag --new-consumer should be provided. Second, bootstrap server should be specified. Leading to this:

bin/kafka-console-consumer.sh --new-consumer  --zookeeper localhost:2181 --topic test --from-beginning --consumer.config=config/consumer.properties  --bootstrap-server=localhost:9092
Share:
26,290
Klaus
Author by

Klaus

Updated on September 17, 2020

Comments

  • Klaus
    Klaus over 3 years

    I am try to replicate the SASL_PLAIN or SASL_SSL authentication described at: http://docs.confluent.io/3.0.0/kafka/sasl.html#sasl-configuration-for-kafka-brokers

    In config/server.properties, I added the following 4 lines:

    listeners=SASL_SSL://localhost:9092
    security.inter.broker.protocol=SASL_SSL
    sasl.mechanism.inter.broker.protocol=PLAIN
    sasl.enabled.mechanisms=PLAIN
    

    In config/producer.properties, I added the following two lines:

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    

    Then I set the following environment variable in the server terminal:

    KAFKA_OPTS=/home/kafka/kafka_server_jaas.conf
    

    This file has the following content:

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

    And in the producer terminal I define the following env variable:

    KAFKA_OPTS=/home/kafka/kafka_client_jaas.conf
    

    And this file has the following content:

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

    I start the server with the following command:

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

    And the producer with following command:

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

    Both start without problems. But, as soon as I type something on the producer console, I get the following message that keeps scrolling:

    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
    

    If I remove the security configuration from the server and the producer configuration, everything works as expected. I am using Kafka 0.10.0.1.

    UPDATE: I did some more investigations, turning log levels to DEBUG on server reveals something weird. As soon as I specify the listeners field in server.properties, the server goes in a weird state. It establishes connection to itsself that it cannot authenticate. The protocol in this case was SASL_PLAINTEXT.

    The logs as here:

    2016-09-15 21:43:02 DEBUG SaslClientAuthenticator:204 - Set SASL client state to RECEIVE_HANDSHAKE_RESPONSE
    2016-09-15 21:43:02 DEBUG NetworkClient:476 - Completed connection to node 0
    2016-09-15 21:43:02 DEBUG Acceptor:52 - Accepted connection from /127.0.0.1 on /127.0.0.1:9092. sendBufferSize [actual|requested]: [102400|102400] recvBufferSize [actual|requested]: [102400|102400]
    2016-09-15 21:43:02 DEBUG Processor:52 - Processor 2 listening to new connection from /127.0.0.1:42815
    2016-09-15 21:43:02 DEBUG SaslServerAuthenticator:269 - Set SASL server state to HANDSHAKE_REQUEST
    2016-09-15 21:43:02 DEBUG SaslServerAuthenticator:310 - Handle Kafka request SASL_HANDSHAKE
    2016-09-15 21:43:02 DEBUG SaslServerAuthenticator:354 - Using SASL mechanism 'PLAIN' provided by client
    2016-09-15 21:43:02 DEBUG SaslServerAuthenticator:269 - Set SASL server state to AUTHENTICATE
    2016-09-15 21:43:02 DEBUG SaslClientAuthenticator:204 - Set SASL client state to INITIAL
    2016-09-15 21:43:02 DEBUG SaslClientAuthenticator:204 - Set SASL client state to INTERMEDIATE
    2016-09-15 21:43:02 DEBUG SaslServerAuthenticator:269 - Set SASL server state to FAILED
    2016-09-15 21:43:02 DEBUG Selector:345 - Connection with /127.0.0.1 disconnected
    java.io.IOException: javax.security.sasl.SaslException: Authentication failed: Invalid JAAS configuration [Caused by     javax.security.sasl.SaslException: Authentication failed: Invalid username or password]
    at org.apache.kafka.common.security.authenticator.SaslServerAuthenticator.authenticate(SaslServerAuthenticator.java:243)
    at org.apache.kafka.common.network.KafkaChannel.prepare(KafkaChannel.java:64)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:318)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:283)
    at kafka.network.Processor.poll(SocketServer.scala:472)
    

    There is absolutely no other client or server running. This is one server talking to himself.

    Any thoughts?