cloudera上的kafka-test=topic\u authorization\u失败

rggaifut  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(511)

我们刚刚从cdh5.3.6升级到5.10.0,在尝试编写kafka主题时出现了错误。我们对所有内容都有默认设置,没有启用ssl或kerberos身份验证。使用console producer写入某个主题时,出现以下错误:
/usr/bin/kafka console producer--broker list=myhost1.dev。com:9092,myhost2.dev。com:9092 --topic 测试

17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka version : 0.10.0-kafka-2.1.0
17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka commitId : unknown
x
17/03/06 21:00:59 WARN clients.NetworkClient: Error while fetching metadata with correlation id 0 : {test=TOPIC_AUTHORIZATION_FAILED}

查看/var/log/kafka/,我看到了一堆例外情况:

2017-03-06 21:00:26,964 WARN org.apache.sentry.provider.common.HadoopGroupMappingService: Unable to obtain groups for ANONYMOUS
java.io.IOException: No groups found for user ANONYMOUS
    at org.apache.hadoop.security.Groups.noGroupsForUser(Groups.java:190)
    at org.apache.hadoop.security.Groups.getGroups(Groups.java:210)
    at org.apache.sentry.provider.common.HadoopGroupMappingService.getGroups(HadoopGroupMappingService.java:60)
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.getGroups(ResourceAuthorizationProvider.java:167)
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.doHasAccess(ResourceAuthorizationProvider.java:97)
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.hasAccess(ResourceAuthorizationProvider.java:91)
    at org.apache.sentry.kafka.binding.KafkaAuthBinding.authorize(KafkaAuthBinding.java:212)
    at org.apache.sentry.kafka.authorizer.SentryKafkaAuthorizer.authorize(SentryKafkaAuthorizer.java:63)
    at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321)
    at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321)
    at scala.Option.map(Option.scala:146)
    at kafka.server.KafkaApis.kafka$server$KafkaApis$$authorize(KafkaApis.scala:321)
    at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702)
    at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702)
    at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314)
    at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314)
    at scala.collection.immutable.Set$Set1.foreach(Set.scala:94)
    at scala.collection.TraversableLike$class.partition(TraversableLike.scala:314)
    at scala.collection.AbstractTraversable.partition(Traversable.scala:104)
    at kafka.server.KafkaApis.handleTopicMetadataRequest(KafkaApis.scala:702)
    at kafka.server.KafkaApis.handle(KafkaApis.scala:79)
    at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
    at java.lang.Thread.run(Thread.java:745)

我一直在寻找解决这个问题的办法,但到目前为止都是空穴来风。我需要将匿名用户分配到某个组吗?我可以在cdh5.3.6中为我的主题编写消息,但升级过程中似乎出现了一些问题。
只是想让helloworld/quickstart示例在升级到cdh5.10.0之后在我们的devkafka上再次工作。

ruoxqz4g

ruoxqz4g1#

-------临时解决方案---
在cloudera manager 5.10中,kafka配置中有一个super.users属性。将匿名添加到该列表中,允许我从我的主题中生成和使用。
我已经在/opt/cloudera/parcels/kafka-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.properties中尝试过这样做,但没有效果。所以cloudera必须在其他地方管理这些价值观。

roejwanj

roejwanj2#

kafka严格区分身份验证和授权-即使您通过kerb或ssl打开了身份验证,仍然可以通过以下参数打开授权:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorize‌​r

这将使kafka检查每次访问的ACL-因为在您的情况下,身份验证是打开的,但是,如果没有为此用户设置ACL,则每个用户都将被评估为匿名并被拒绝。
您可以从您的配置中删除该设置,这将使Kafka恢复到原来的、信任的自我。我不知道你会在cloudera管理器中这样做,所以另一种方法是在cm中提供的超级用户列表中添加匿名用户。当然,也可以定义一个acl来允许匿名访问。
对于以后的生产使用,您可能应该设置ssl或kerberos,并在有可能从外部访问集群时定义适当的acl。

相关问题