Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Cloudera上的卡夫卡-测试=主题\授权\失败_Apache Kafka_Apache Zookeeper_Cloudera_Cloudera Cdh_Apache Sentry - Fatal编程技术网

Apache kafka Cloudera上的卡夫卡-测试=主题\授权\失败

Apache kafka Cloudera上的卡夫卡-测试=主题\授权\失败,apache-kafka,apache-zookeeper,cloudera,cloudera-cdh,apache-sentry,Apache Kafka,Apache Zookeeper,Cloudera,Cloudera Cdh,Apache Sentry,我们刚刚从CDH 5.3.6升级到5.10.0,在尝试编写卡夫卡主题时开始出错。我们对所有内容都有默认设置,没有启用SSL或Kerberos身份验证。使用console producer写入我的一个主题时,出现以下错误: /usr/bin/kafka控制台生产者--代理列表=myhost1.dev.com:9092,myhost2.dev.com:9092--主题测试 17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka version : 0.10

我们刚刚从CDH 5.3.6升级到5.10.0,在尝试编写卡夫卡主题时开始出错。我们对所有内容都有默认设置,没有启用SSL或Kerberos身份验证。使用console producer写入我的一个主题时,出现以下错误:

/usr/bin/kafka控制台生产者--代理列表=myhost1.dev.com:9092,myhost2.dev.com:9092--主题测试

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)
我一直在寻找解决这个问题的方法,但到目前为止都是空穴来风。我是否需要将匿名用户分配到某个组?我可以在CDH 5.3.6中为我的主题编写消息,但升级过程中似乎出现了问题

只是想让helloWorld/Quickstart示例在升级到CDH 5.10.0后在我们的开发卡夫卡上再次工作

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

在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必须在其他地方管理这些值。

卡夫卡严格区分身份验证和授权-即使您通过Kerb或SSL进行身份验证,仍然可以通过以下参数打开授权:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorize‌​r
这将使Kafka检查每次访问的ACL-因为在您的情况下,身份验证已关闭,但如果没有为此用户设置ACL,则每个用户都将被评估为匿名并被拒绝

您可以从您的配置中删除该设置,这将使卡夫卡恢复其旧的、信任的自我。不过,我不确定在Cloudera Manager中您将在哪里执行此操作,因此另一种选择是将匿名添加到CM中可用的超级用户列表中。当然,也可以只定义一个ACL来允许匿名访问


对于以后的生产使用,如果有可能从外部访问群集,您可能应该设置SSL或Kerberos并定义适当的ACL。

您可以检查为authorizer.class.name设置的值吗?当您没有配置Kerberos或SSL时,您仍然可以强制实施ACL。如果在此处设置了某些内容,则每个连接的人都将被身份验证为“匿名”,这就是你在日志中看到的。我修改了/opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/KAFKA/conf.dist/server.properties使其具有以下行:authorizer.class.name=KAFKA.security.auth.SimpleClauthorizer,但这似乎并不重要,我甚至不确定这是正确的文件,也不确定如何验证更改是否生效。是的,这就是导致这种情况的原因(不确定该文件,但似乎合适)。通过这句话,你告诉卡夫卡对所有连接尝试应用ACL——所有这些都是针对“匿名”的。我建议去掉那条线,一切都会好起来的。或者,您可以在配置中将ANONYMOUS设置为superuser,这应该具有相同的效果,但不提供任何额外的安全性,因此在我看来这不是真正有用的。遗憾的是,在我添加该行之前,升级之后,这个错误就开始发生了。我已经移除了它,它仍然在发生。是否可以在server.properties文件之外的其他地方配置它?我在Cloudera Manager的任何地方都看不到它。我不确定设置是否以CM为单位,我手头没有要检查的集群。我认为有一个选项可以在某处添加超级用户,如果在不检查Kerberos身份验证的情况下启用了该选项,那么可以尝试在那里添加匿名用户作为解决方法。