大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在一个正在运行的kafka集群中添加kerberos认证和ACL权限控制,同时保证以前所有的producer\consumer服务不中断
创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为长子企业提供专业的成都做网站、网站制作,长子网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
解决方式: 使kafka集群监听两个端口,一个为无认证连接,另一个为kerberos的认证连接
这时候在配置ACL的时候出了问题:
假如我以kerberos认证的方式连接kafka集群,那么我的用户名是principal的primary部分。例如principal是 kafka/master@HZ.DATA.COM ,那么我的用户名就是kafka。 这时候我只要给kafka这个用户配置相应的权限就可以了。
但是当我以非认证的方式连接kafka集群的时候,我会得到以下的错误:
[WARN ]16:06:55,440, [Class]NetworkClient, Error while fetching metadata with correlation id 1 : {test=UNKNOWN_TOPIC_OR_PARTITION} org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]
或者在console-producer中的错误如下:
[2017-08-22 15:17:27,576] WARN Error while fetching metadata with correlation id 2 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2017-08-22 15:17:27,685] WARN Error while fetching metadata with correlation id 4 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2017-08-22 15:17:27,787] WARN Error while fetching metadata with correlation id 6 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2017-08-22 15:17:27,890] WARN Error while fetching metadata with correlation id 7 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2017-08-22 15:17:27,993] WARN Error while fetching metadata with correlation id 8 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
原因: 一旦为kerberos的用户针对某个资源(比如topic)配置ACL之后,那么对于非认证方式访问的时候因为没有权限所以访问不到对应的数据。
解决方法: 将kafka集群的日志设为debug级别后重启,可以看到非认证方式访问kafka集群时的用户为ANONYMOUS
1、给 ANONYMOUS配置相应的权限即可
2、每一个topic都要为 ANONYMOUS设置权限毕竟不方便, 可以将ANONYMOUS设为super.users