首页 > 其他 > 详细

Kerberos环境下访问Kafka

时间:2021-04-28 14:51:39      阅读:24      评论:0      收藏:0      [点我收藏+]

创建 topic 报错

console 输出信息如下

21/04/28 19:47:19 INFO zookeeper.ZooKeeperClient: [ZooKeeperClient] Connected.
Error while executing topic command : Replication factor: 2 larger than available brokers: 0.
21/04/28 19:47:19 ERROR admin.TopicCommand$: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 0.

检查 kafka 配置文件看到 zookeeper.chroot=/kakfa,也就是说 kafka 在 zookeeper 中创建的所有 znode 都在 /kafka 下(以前的版本直接在 / 下创建 kafka 所需的所有 znode)
技术分享图片

[zk: k1.example.com(CONNECTED) 0] ls /
[hbase, hiveserver2, hiveserver2-leader, kafka, rmstore, solr-infra, zookeeper]
[zk: k1.example.com(CONNECTED) 1] ls /kafka
[admin, brokers, cluster, config, consumers, controller, controller_epoch, delegation_token, isr_change_notification, latest_producer_id_block, log_dir_event_notification]

因此,在创建 topic 使用 --zookeeper 指定 zookeeper 连接串的时候,需要指定要 zookeeper.chroot 配置的目录,即 --zookeeper $(hostname):2181/kafka, 创建 topic 的完整命令为

kafka-topics --zookeeper $(hostname):2181/kafka --create --topic t2 --partitions 3 --replication-factor 2

执行之后继续报错,提示信息如下

Error while executing topic command : KeeperErrorCode = NoAuth for /config/topics/t2
21/04/28 19:56:23 ERROR admin.TopicCommand$: org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /config/topics/t2
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:120)
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
	at kafka.zookeeper.AsyncResponse.maybeThrow(ZooKeeperClient.scala:561)
	at kafka.zk.KafkaZkClient.createRecursive(KafkaZkClient.scala:1640)
	at kafka.zk.KafkaZkClient.createOrSet$1(KafkaZkClient.scala:362)
	at kafka.zk.KafkaZkClient.setOrCreateEntityConfigs(KafkaZkClient.scala:372)
	at kafka.zk.AdminZkClient.createTopicWithAssignment(AdminZkClient.scala:93)
	at kafka.zk.AdminZkClient.createTopic(AdminZkClient.scala:57)
	at kafka.admin.TopicCommand$ZookeeperTopicService.createTopic(TopicCommand.scala:333)
	at kafka.admin.TopicCommand$TopicService$class.createTopic(TopicCommand.scala:194)
	at kafka.admin.TopicCommand$ZookeeperTopicService.createTopic(TopicCommand.scala:325)
	at kafka.admin.TopicCommand$.main(TopicCommand.scala:61)
	at kafka.admin.TopicCommand.main(TopicCommand.scala)

从以上信息中,可以发现操作 Znode /config/topics/t2 时没有认证,而使用klist 检查已经认证成功。此时,需要为 zookeeper 客户端配置 jaas.conf 文件,如zookeeper_client_jaas.conf

Client {
	com.sun.security.auth.module.Krb5LoginModule required
	useKeyTab=false
	useTicketCache=true;
};

声明 Zookeeper Client 环境变量

export JVMFLAGS="-Djava.security.auth.login.config=/etc/zookeeper/conf/zookeeper_client_jaas.conf"

再次执行上述创建 topic 的命令后,成功创建。

消费 topic 报错

Kerberos 环境下正常操作 Kafka 可以参考以下步骤

  1. 配置 Kafka Client Jaas 配置文件 kafka_client_jaas.conf
KafkaClient {
	com.sun.security.auth.module.Krb5LoginModule required
	useTicketCache=true
	renewTicket=true
	serviceName="kafka";
};
  1. Zookeeper Client Jaas 配置文件 zookeeper_client_jaas.conf
Client {
	com.sun.security.auth.module.Krb5LoginModule required
	useKeyTab=false
	useTicketCache=true;
};
  1. 声明 Kafka Client 环境变量
export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/conf/kafka_client_jaas.conf"
  1. 声明 Zookeeper Client 环境变量
export JVMFLAGS="-Djava.security.auth.login.config=/etc/zookeeper/conf/zookeeper_client_jaas.conf"
  1. 创建 Topic
kafka-topics --zookeeper $(hostname):2181/kafka --create --topic t1 --partitions 3 --replication-factor 2
  1. 生产数据
kafka-console-producer --broker-list $(hostname):9092 --topic t1 --producer-property security.protocol=SASL_PLAINTEXT
  1. 消费数据
kafka-console-consumer --bootstrap-server $(hostname):9092 --topic t1 --consumer-property security.protocol=SASL_PLAINTEXT

Kerberos环境下访问Kafka

原文:https://www.cnblogs.com/eats/p/14713419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!