首页 文章

Cloudera上的Kafka - test = TOPIC_AUTHORIZATION_FAILED

提问于
浏览
1

我们刚刚从CDH 5.3.6升级到5.10.0,并在尝试写入Kafka主题时开始出错 . 我们对所有内容都有默认设置,未启用SSL或Kerberos身份验证 . 当使用控制台生成器写入我的一个主题时,我收到此错误:

/ usr / bin / kafka-console-producer --broker-list = myhost1.dev.com:9092,myhost2.dev.com:9092-topic test

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)

我一直在寻找解决方案,但到目前为止空洞 . 我是否需要将ANONYMOUS用户分配到某个组?我能够在CDH 5.3.6中为我的主题编写消息,但是在升级中看起来出现了问题 .

在升级到CDH 5.10.0之后,尝试让helloWorld / Quickstart示例再次在我们的DEV Kafka上运行 .

-----------------临时解决方案---

在cloudera manager 5.10中,kafka配置中有一个super.users属性 . 将ANONYMOUS添加到该列表中,允许我生成和使用我的主题 .

我已经尝试在/opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.properties中执行此操作,该操作无效 . 所以Cloudera必须在其他地方管理这些 Value 观 .

1 回答

  • 1

    Kafka严格区分身份验证和授权 - 即使您通过Curb或SSL启用了身份验证,仍然可以通过以下参数启用授权:

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

    这将使Kafka检查每次访问的ACL - 因为在您的情况下启用了身份验证,但是如果没有为此用户设置ACL,则每个用户将被评估为ANONYMOUS并被拒绝 .

    您可以从配置中删除该设置,这将使Kafka返回其旧的,信任的,自我 . 我不知道你在Cloudera Manager中的位置,所以另一种方法是将ANONYMOUS添加到CM中可用的超级用户列表中 . 或者当然只需定义ACL以允许访问ANONYMOUS .

    对于以后的 生产环境 用途,如果有可能从外部访问集群,则应该设置SSL或Kerberos并定义正确的ACL .

相关问题