单机节点Kafka配置SASL用户名密码认证
2017-06-13 17:13
337 查看
转载请注明出处:http://blog.csdn.net/u012842205/article/details/73188534
伪分布式Kafka,只用一个节点,zookeeper也用集成在Kafka里的。首先得配置zookeeper的SASL,再配置Kafka broker的SASL。先启动zookeeper节点,再启动Kafka broker。最后测试consumer和读写。
Kafka版本2.11-0.10.0.0,集成的zookeeper为3.4.6。
一、Zookeeper
1、单节点zookeeper配置
注意,这里我只使用Kafka里集成的zookeeper。先配置zookeeper.properties配置文件,写入如下配置项:
2、创建JAAS配置文件
JAAS配置文件指定身份认证插件,并提供登录到zookeeper的登录名与密码。我创建了一个配置文件kafka_zoo_jaas.conf :
3、启动前设置环境变量
解释为何要设置:
设置的环境变量其实只是传入到JVM的参数。我们设置的环境变量是KAFKA_OPTS。zookeeper的启动脚本调用如下:
bin/zookeeper-server-start.sh
bin/kafka-run-class.sh
在最后这个脚本中,将会使用到KAFKA_OPTS这个变量,并传入JVM。所以这个变量设置成JVM能识别的格式即可。-Dkey=value
这里我配置两个变量:
第一个是指定上一步骤中jaas配置文件的路径,第二个参数指定的就是JAAS应用名称,也就是zookeeper在jaas配置文件中寻找的配置节,上一步骤已经说了,默认是Server,这里修改成ZKServer。
4、启动zookeeper
使用启动脚本bin/zookeeper-server-start.sh,3、 4两步骤可以直接写成一个脚本:
执行这个脚本即可。
可以查看日志文件,成功执行没有抛异常即可。
二、Kafka Broker
1、伪分布式Kafka Broker配置
上一节配置了内嵌的zookeeper,确保启动成功。Kafka这部分配置稍多一些,先配置server.properties:
2、创建JAAS配置文件
我们需要设置KafkaServer节配置和Client节配置,其中KafkaServer节定义其他链接Broker的客户端及客户端之间相互通信所使用的的用户名密码。Client节用于与zookeeper通信时进行认证,用户名密码在上一步配置zookeeper时的zookeeper JAAS配置文件中定义了。
以下是我的kafka_server_jaas.conf配置文件:
KafkaServer中定义了两个用户,一个geting,一个alice,两个用户都可以给客户端程序使用(生产者、消费者程序)。我们选择geting这个用户作为Kafka broker之间的内部认证。username和password用于broker之间通信。
Client没什么不同的,就是broker与zookeeper通信时登录zookeeper的用户名密码,上面配置zookeeper JAAS时只定义了一个admin用户,只能填写这个。
3、配置KAFKA_OPTS shell变量
上面说的kafka_server_jaas.conf配置文件也同zookeeper一样,要在启动kafka broker时传递给JVM,同样可以设置KAFKA_OPTS,下面是kafkabroker启动脚本:
4、启动broker
调用上一步编写的启动脚本,启动broker。查看日志,没有什么异常则成功。
三、简单的Producer编写
0.9以后的kafka版本生产者API没有问题,可以直接使用,0.9前的生产者API貌似不支持安全,这个问题具体查看官方文档,更具体的我不了解。
0.10后的kafka,生产者代码我不写了,关键说说需要增加的配置操作。
1、添加配置
JAVA程序的KafkaProducer初始化需要传入Properties,向Properties实例(假设是props)中加入如下配置项:
2、编写JAAS配置文件
这里我们用kafka_client_jaas.conf
配置节KafkaClient,默认的是这个,这个名称也可以修改,自行查官方文档。我们使用alice用户。高版本的kafka,其生产者消费者只需要直接链接kafka broker即可,所以不用配置zookeeper。
3、指定JAAS配置文件
同理,通过变量java.security.auth.login.config传递给JVM。Kafka的client组件会调用System.getProperty()这个JDK函数获取到JAAS配置文件路径,所以我们直接使用System.setProperty()设置这个变量即可。
4、启动生产者
提议最好设置一个log4j配置文件,并且设置日志级别为DEBUG,这样就能看见是否正常写入数据。
四、简单的Consumer编写
步骤同producer。
最后说说,JAAS配置文件的语法必须写对,否则总会爆出一些奇奇怪怪的错误,具体格式可以上oracle jdk官方API查看:
http://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html
伪分布式Kafka,只用一个节点,zookeeper也用集成在Kafka里的。首先得配置zookeeper的SASL,再配置Kafka broker的SASL。先启动zookeeper节点,再启动Kafka broker。最后测试consumer和读写。
Kafka版本2.11-0.10.0.0,集成的zookeeper为3.4.6。
一、Zookeeper
1、单节点zookeeper配置
注意,这里我只使用Kafka里集成的zookeeper。先配置zookeeper.properties配置文件,写入如下配置项:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000
2、创建JAAS配置文件
JAAS配置文件指定身份认证插件,并提供登录到zookeeper的登录名与密码。我创建了一个配置文件kafka_zoo_jaas.conf :
ZKServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret"; };这里我配置的应用名称为ZKServer,zookeeper默认使用的JAAS应用名称是Server。这个名称如何修改在后面解释。使用如user_<username>的格式定义用户,等号右边的值即是密码。我们使用user_admin配置了一个用户名为admin,密码为admin-secret。最后,再选择一个用户作为Zookeeper内部各个节点间的通信认证。只有一个amdin用户,所以填写username和password即可。当然,也可以定义多个用户,视自己的需求来定义。
3、启动前设置环境变量
解释为何要设置:
设置的环境变量其实只是传入到JVM的参数。我们设置的环境变量是KAFKA_OPTS。zookeeper的启动脚本调用如下:
bin/zookeeper-server-start.sh
bin/kafka-run-class.sh
在最后这个脚本中,将会使用到KAFKA_OPTS这个变量,并传入JVM。所以这个变量设置成JVM能识别的格式即可。-Dkey=value
这里我配置两个变量:
-Djava.security.auth.login.config=$ROOT/config/kafka_zoo_jaas.conf -Dzookeeper.sasl.serverconfig=ZKServer
第一个是指定上一步骤中jaas配置文件的路径,第二个参数指定的就是JAAS应用名称,也就是zookeeper在jaas配置文件中寻找的配置节,上一步骤已经说了,默认是Server,这里修改成ZKServer。
4、启动zookeeper
使用启动脚本bin/zookeeper-server-start.sh,3、 4两步骤可以直接写成一个脚本:
#!/bin/bash ROOT=`dirname $0` export KAFKA_OPTS=" -Djava.security.auth.login.config=$ROOT/config/kafka_zoo_jaas.conf -Dzookeeper.sasl.serverconfig=ZKServer " $ROOT/bin/zookeeper-server-start.sh $ROOT/config/zookeeper.properties >> zookeeper.log 2>&1 &
执行这个脚本即可。
可以查看日志文件,成功执行没有抛异常即可。
二、Kafka Broker
1、伪分布式Kafka Broker配置
上一节配置了内嵌的zookeeper,确保启动成功。Kafka这部分配置稍多一些,先配置server.properties:
# 监听的地址,使用的schema是SASL_PLAINTEXT,即最简单的用户名密码认证,不需要加密。 listeners=SASL_PLAINTEXT://vubuntuez1:9092 # 使用的认证协议 security.inter.broker.protocol=SASL_PLAINTEXT # SASL机制 sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN # 完成身份验证的类 authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer # 如果没有找到ACL(访问控制列表)配置,则允许任何操作。 allow.everyone.if.no.acl.found=true
2、创建JAAS配置文件
我们需要设置KafkaServer节配置和Client节配置,其中KafkaServer节定义其他链接Broker的客户端及客户端之间相互通信所使用的的用户名密码。Client节用于与zookeeper通信时进行认证,用户名密码在上一步配置zookeeper时的zookeeper JAAS配置文件中定义了。
以下是我的kafka_server_jaas.conf配置文件:
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="geting" password="geting" user_geting="geting" user_alice="geting"; }; Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret"; };
KafkaServer中定义了两个用户,一个geting,一个alice,两个用户都可以给客户端程序使用(生产者、消费者程序)。我们选择geting这个用户作为Kafka broker之间的内部认证。username和password用于broker之间通信。
Client没什么不同的,就是broker与zookeeper通信时登录zookeeper的用户名密码,上面配置zookeeper JAAS时只定义了一个admin用户,只能填写这个。
3、配置KAFKA_OPTS shell变量
上面说的kafka_server_jaas.conf配置文件也同zookeeper一样,要在启动kafka broker时传递给JVM,同样可以设置KAFKA_OPTS,下面是kafkabroker启动脚本:
#!/bin/bash ROOT=`dirname $0` export KAFKA_OPTS=" -Djava.security.auth.login.config=$ROOT/config/kafka_server_jaas.conf" $ROOT/bin/kafka-server-start.sh $ROOT/config/server.properties >> kafka.log 2>&1 &
4、启动broker
调用上一步编写的启动脚本,启动broker。查看日志,没有什么异常则成功。
三、简单的Producer编写
0.9以后的kafka版本生产者API没有问题,可以直接使用,0.9前的生产者API貌似不支持安全,这个问题具体查看官方文档,更具体的我不了解。
0.10后的kafka,生产者代码我不写了,关键说说需要增加的配置操作。
1、添加配置
JAVA程序的KafkaProducer初始化需要传入Properties,向Properties实例(假设是props)中加入如下配置项:
props.setProperty ("security.protocol", "SASL_PLAINTEXT"); props.setProperty ("sasl.mechanism", "PLAIN");
2、编写JAAS配置文件
这里我们用kafka_client_jaas.conf
KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="geting"; };
配置节KafkaClient,默认的是这个,这个名称也可以修改,自行查官方文档。我们使用alice用户。高版本的kafka,其生产者消费者只需要直接链接kafka broker即可,所以不用配置zookeeper。
3、指定JAAS配置文件
同理,通过变量java.security.auth.login.config传递给JVM。Kafka的client组件会调用System.getProperty()这个JDK函数获取到JAAS配置文件路径,所以我们直接使用System.setProperty()设置这个变量即可。
4、启动生产者
提议最好设置一个log4j配置文件,并且设置日志级别为DEBUG,这样就能看见是否正常写入数据。
四、简单的Consumer编写
步骤同producer。
最后说说,JAAS配置文件的语法必须写对,否则总会爆出一些奇奇怪怪的错误,具体格式可以上oracle jdk官方API查看:
http://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html
相关文章推荐
- 单机节点Kafka配置SASL用户名密码认证
- 集群Kafka配置SASL用户名密码认证
- 集群Kafka配置SASL用户名密码认证
- Mongodb 集群配置用户名密码认证
- apache的认证安全配置,访问资源时,弹出登陆框需要用户名密码
- spring xml配置mongodb远程用户名密码认证
- Kafka配置SASL身份认证及权限实现文档
- 使用powershell通过配置文件config调用wcf(含用户名密码认证)
- Linux系统消息队列框架Kafka单机安装配置
- Redis配置认证密码
- Oracle EM配置失败后,提示用户名、密码失效(未配置监听)
- Kafka之——安装并(单节点)配置启动Kafka
- redis配置密码认证
- git配置用户名密码、生成ssh。添加到github
- 详解Nginx实战之让用户通过用户名密码认证访问web站点
- Centos下kafka 单机配置部署详解