1. 程式人生 > >kafka kerberos 認證訪問與非認證訪問共存下的ACL問題

kafka kerberos 認證訪問與非認證訪問共存下的ACL問題

kerberos kafka acl

在一個正在運行的kafka集群中添加kerberos認證和ACL權限控制,同時保證以前所有的producer\consumer服務不中斷

解決方式: 使kafka集群監聽兩個端口,一個為無認證連接,另一個為kerberos的認證連接

這時候在配置ACL的時候出了問題:

假如我以kerberos認證的方式連接kafka集群,那麽我的用戶名是principal的primary部分。例如principal是 kafka/[email protected] ,那麽我的用戶名就是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


kafka kerberos 認證訪問與非認證訪問共存下的ACL問題