Ambari 上使用 Kakfa

TigerJin發表於2021-09-09

以下內容是針對在Ambari上啟用了Kerberos認證的情況下處理的。

  1. 首先開啟ranger許可權管理

    圖片描述

    image.png

  1. 配置admin使用者許可權

    圖片描述

    image.png

控制檯使用方法

消費者

kafka-console-consumer.sh --bootstrap-server t2.demo.com:9092 --topic test_hello --security-protocol PLAINTEXTSASL

生產者

kafka-console-producer.sh 
    --broker-list storm2.starsriver.cn:9092 
    --topic test_hello 
    --property key.separator=' ' 
    --security-protocol PLAINTEXTSASL

啟動消費者

[root@t1 bin]# kafka-console-consumer.sh 
    --bootstrap-server t2.demo.com:9092 
    --topic test_hello 
    --security-protocol PLAINTEXTSASL
hi I'm lake

啟動生產品

[root@t1 bin]# kafka-console-producer.sh 
    --broker-list t2.demo.com:9092 
    --topic test_hello 
    --property key.separator=' ' 
    --security-protocol PLAINTEXTSASL
>hi I'm lake
>

Java API 方式

匯入依賴包

compile group: 'org.apache.kafka', name: 'kafka_2.12', version: '1.0.1'compile group: 'org.apache.kafka', name: 'kafka-clients', version: '1.0.1'

kafka_jass.conf配置檔案

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

生產者

@Testpublic void testProducer(){
    System.setProperty("java.security.auth.login.config", "/path/kafka_jass.conf");
    System.setProperty("java.security.krb5.conf","/etc/krb5.conf");
    System.setProperty("java.security.krb5.debug","true");
    Properties props = new Properties();
    props.put("metadata.broker.list", "t2.demo.com,t3.demo.com,t4.demo.com");
    props.put("bootstrap.servers", "t2.demo.com:9092,t3.demo.com:9092,t4.demo.com:9092");
    props.put("key.serializer",StringSerializer.class.getName());
    props.put("value.serializer", StringSerializer.class.getName());
    props.put("request.required.acks", "1");
    props.put("security.protocol", "SASL_PLAINTEXT");
    KafkaProducer producer = new KafkaProducer(props);
    producer.send(new ProducerRecord<String,String>("test_hello","hi","lake"));
    producer.close();
}

消費者

@Testpublic void testConsumer(){
    System.setProperty("java.security.krb5.conf","/etc/krb5.conf");
    System.setProperty("java.security.auth.login.config","/path/kafka_jass.conf");
    Properties props = new Properties();
    props.put("group.id", "hi");
    props.put("bootstrap.servers", "t2.demo.com:9092,t3.demo.com:9092,t4.demo.com:9092");
    props.put("key.deserializer", StringDeserializer.class.getName());
    props.put("value.deserializer", StringDeserializer.class.getName());
    props.put("request.required.acks", "1");
    props.put("security.protocol", "SASL_PLAINTEXT");
    props.put("security.inter.broker.protocol", "SASL_PLAINTEXT");
    KafkaConsumer consumer = new KafkaConsumer(props);
    consumer.subscribe(Arrays.asList("test_hello"));    for(;;){
        ConsumerRecords<String,String> list = consumer.poll(100);        for(ConsumerRecord<String,String> record : list){
            System.out.println(record.key()+":"+record.value());
        }
    }
}



作者:dounine
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2815144/,如需轉載,請註明出處,否則將追究法律責任。

相關文章