一、Consumer代码示例
1、Jaas示例
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "x.x.x.x:9092");
props.put("group.id", "group-1");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("auto.offset.reset", "latest");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "PLAIN");
props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"xxx\" password=\"xxx\";");
KafkaConsumer kafkaConsumer = new KafkaConsumer<>(props);
kafkaConsumer.subscribe(Arrays.asList("lanxin-desensitization-log"));
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofSeconds(1));
for (ConsumerRecord<String, String> record : records)
System.out.println("Partition: " + record.partition() + " Offset: " + record.offset() + " Value: " + record.value() + " ThreadID: " + Thread.currentThread().getId());
}
}
2、Kerberos示例
public static void main(String[] args) {
System.setProperty("java.security.auth.login.config", "/etc/jaas.conf");
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
Properties props = new Properties();
props.put("bootstrap.servers", "x.x.x.x:9092");
props.put("group.id", "group-1");
props.put("enable.auto.commit", "false");
props.put("auto.commit.interval.ms", "1000");
props.put("auto.offset.reset", "earliest");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "GSSAPI");
props.put("sasl.kerberos.service.name", "kafka");
KafkaConsumer kafkaConsumer = new KafkaConsumer<>(props);
kafkaConsumer.subscribe(Arrays.asList("topic-test"));
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofSeconds(1));
for (ConsumerRecord<String, String> record : records)
System.out.println("Partition: " + record.partition() + " Offset: " + record.offset() + " Value: " + record.value() + " ThreadID: " + Thread.currentThread().getId());
}
}
二、Producer代码示例
Producer<String, String> producer = new KafkaProducer<String, String>(props);
String msg= "test";
ProducerRecord<String, String> producerRecord = new ProducerRecord("topic-producer", msg);
三、解决Offset Explorer可以连接,krb5不通的问题,报错问题
1、报错信息如下:
Caused by:KrbException:Cannot locate KDC
at sun.security.krb5.Config.getKDCList(Config.java:1061)
at sun.security.krb5.KdcComm.send(KdcComm.java:218)
at sun.security.krb5.KdcComm.send(KdcComm.java:200)
at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:316)
at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:361)
at sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:776)
... 24 more
Caused by:KrbException:Generic error (description in e-text) (60) - Unable to locate KDC for realm ZZYC.COM
at sun.security.krb5.Config.getKDCFromDNS(Config.java:1158)
at sun.security.krb5.Config.getKDCList(Config.java:1034)
... 29 more
2、绕过Krb5方法
public static void main(String[] args) {
System.setProperty("java.security.auth.login.config", "D:\\jaas.conf");
Properties props = new Properties();
props.put("bootstrap.servers", "x.x.x.x:9092");
props.put("group.id", "group-1");
props.put("enable.auto.commit", "false");
props.put("auto.commit.interval.ms", "1000");
props.put("auto.offset.reset", "earliest");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("security.protocol", "PLAINTEXT");
props.put("sasl.mechanism", "PLAIN");
props.put("sasl.kerberos.service.name", "kafka");
KafkaConsumer kafkaConsumer = new KafkaConsumer<>(props);
kafkaConsumer.subscribe(Arrays.asList("topic-log"));
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofSeconds(1));
for (ConsumerRecord<String, String> record : records)
System.out.println("Partition: " + record.partition() + " Offset: " + record.offset() + " Value: " + record.value() + " ThreadID: " + Thread.currentThread().getId());
}
}