剛測通的kafka的producer和consumer,下來準備搞一下kafka的認證,SSL比較複雜,而且影響性能,內部暫時不考慮,因此把目標定在了SASL上。本來以爲按照網上的教程簡單配置一下很快就能搞定的,結果沒有一個能用的,走了好多彎路,花了一天多才搞定,因此記錄一下,此次的配置針對的是kafka0.10.1.1的版本
配置分爲3部分,zookeeper的配置、broker的配置和producer以及consumer的配置。
第一部分 zookeeper的配置
進入kafka目錄執行 vi kafka_zoo_jaas.conf
Server {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
vi bin/zookeeper-server-start.sh在文檔的倒數第二行加入以下內容:
export KAFKA_OPTS=" -Djava.security.auth.login.config=/usr/local/kafka1011/kafka_zoo_jaas.conf"
然後執行vi config/zookeeper.properties添加zookeeper.properties中的配置如下:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
執行./bin/zookeeper-server-start.sh config/zookeeper.properties 啓動zookeeper成功。
在zookeeper這裏卡了很久,主要是一開始沒有意識到是zookeeper的問題。
第二部分 broker的配置
vi kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="prod-sec"
user_consumer="cons-sec";
};
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret";
};
不知道是不是跟kafka的版本有關係,我看別人這裏配置的不是Client。
cp bin/kafka-server-start.sh bin/secured-kafka-server-start.sh
vi bin/secured-kafka-server-start.sh
在最後一行改爲以下內容
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/usr/local/kafka1011/kafka_server_jaas.conf kafka.Kafka "$@"
然後vi $KAFKA_HOME/server.properties或者vi config/server.properties加入以下內容:
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true
super.users=User:admin
執行./bin/secured-kafka-server-start.sh ./config/server.properties觀察日誌,成功。第三部分 producer以及consumer的配置
vi writer_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret";
};
vi producer.properties 和consumer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
cp bin/kafka-console-consumer.sh bin/reader-kafka-console-consumer.sh
vi bin/reader-kafka-console-consumer.sh
cp bin/kafka-console-producer.sh bin/writer-kafka-console-producer.sh
vi bin/writer-kafka-console-producer.sh
修改writer-kafka-console-producer.sh與reader-kafka-console-consumer.sh文件
最後一行改爲
exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/usr/local/kafka1011/writer_jaas.conf kafka.tools.ConsoleProducer "$@"
再用kafka-acls.sh對用戶進行授權
./bin/kafka-acls.sh --authorizer-properties zookeeper.connect=10.1.8.16:2181,10.1.8.15:2181,10.1.8.14:2181 --add --allow-principal User:admin --operation Read --operation Write --topic replica
然後啓動writer-kafka-console-producer.sh
./bin/writer-kafka-console-producer.sh --broker-list 10.1.8.16:9092,10.1.8.15:9092,10.1.8.14:9092 --topic replica --producer.config config/producer.properties
./bin/reader-kafka-console-consumer.sh --bootstrap-server 10.1.8.16:9092,10.1.8.15:9092,10.1.8.14:9092 --topic replica --from-beginning --consumer.config config/consumer.properties
下面是一些錯誤的彙總
zookeeper配置不正確,zookeeper.properties中缺少了那三行配置
kafka_server_jaas.conf與對應的kafka_zoo_jaas.conf錯誤
kafka_server_jaas.conf中的應爲Client而不是KafkaClient
這個錯誤是第一次配置時出來的,想了一下第一次的配置與最終版本的配置差異較大,出了這種問題的話建議重來吧
這個是kafka_zoo_jaas.conf中配置的問題,網上搜的資料是配置爲zookeeper,但是實際上應該爲Server。
壓力測試命令
./bin/kafka-producer-perf-test.sh --topic test-pati3-rep2 --throughput 500000 --num-records 1500000 --record-size 1000 --producer.config config/producer.properties --producer-props bootstrap.servers=10.1.8.16:9092,10.1.8.15:9092,10.1.8.14:9092 acks=1
下週準備嘗試下多用戶的配置,到時候繼續更新。