Kafka Java Producer with kerberos

后端 未结 2 437
囚心锁ツ
囚心锁ツ 2021-01-03 05:08

Getting error while sending message to kafka topic in kerberosed enviornment. We have cluster on hdp 2.3

I followed this http://henning.kropponline.de/2016/02/21/sec

相关标签:
2条回答
  • 2021-01-03 05:53

    The error is in a semicolon you have in your jaas file as you can see in this piece of output:

    Line 6: expected [controlFlag]
    

    This line cannot have the semicolon:

    principal="ctadmin/prod-dev1-dn1@PROD.COM";
    

    it can only exist in the last line:

    0 讨论(0)
  • 2021-01-03 05:59

    I don't know what mistake did first time, below things I did again, and it works fine.

    First give all access to topic:

    bin/kafka-acls.sh --add --allow-principals user:ctadmin --operation ALL --topic marchTesting --authorizer-properties zookeeper.connect={hostname}:2181
    

    create jass file: kafka-jaas.conf

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     doNotPrompt=true
     useTicketCache=true
     principal="ctadmin@HSCALE.COM"
     useKeyTab=true
     serviceName="kafka"
     keyTab="/etc/security/keytabs/ctadmin.keytab"
     client=true;
    };
    

    Java Program:

    package com.ct.test.kafka;
    
    import java.util.Date;
    import java.util.Properties;
    
    import kafka.javaapi.producer.Producer;
    import kafka.producer.KeyedMessage;
    import kafka.producer.ProducerConfig;
    
    public class KafkaProducer {
    
        public static void main(String[] args) {
            String topic = args[0];
    
            Properties props = new Properties();
            props.put("metadata.broker.list", "{Hostname}:6667");
            props.put("serializer.class", "kafka.serializer.StringEncoder");
            props.put("request.required.acks", "1");
            props.put("security.protocol", "PLAINTEXTSASL");
    
            ProducerConfig config = new ProducerConfig(props);
            Producer<String, String> producer = new Producer<String, String>(config);
    
            for (int i = 0; i < 10; i++){
                producer.send(new KeyedMessage<String, String>(topic, "Test Date: " + new Date()));
            }
        }
    }
    

    Run application:

    java -Djava.security.auth.login.config=/home/ctadmin/kafka-jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=true -cp kafka-testing-0.0.1-jar-with-dependencies.jar com.ct.test.kafka.KafkaProducer

    0 讨论(0)
提交回复
热议问题