kafka使用笔记-基于SASL认证的kafka伪集群环境搭建及测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30549833/article/details/84882154

搭建免认证kafka单机 之后由于业务需要,搭建了基于SASL认证的kafka伪集群环境。本次同样使用的是 kafka_2.10-0.10.1.0.tgz 版本的kafka,集成zookeeper,只需要对此进行配置即可,无需单独安装。

一、准备工作

1、环境:ubuntu16
2、安装包: 打开此链接 选择下载的路径和相应的数据包,我使用的是 kafka_2.11-2.1.0.tgz 版本
3、安装jdk
jdk分为以下几种:jre、openjdk、 oracle jdk,这里我们要安装的是oracle jdk(推荐安装),过程:

add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java8-installer
apt-get install oracle-java8-set-default

二、安装kafka

1、 解压安装包

直接解压之后,如目录结构:
在这里插入图片描述

2、修改基础配置项

kafka和zookeeper在需要认证的情况下,需要对其认证方式和基础配置内容进行配置,主要是修改和添加认证配置。
需要修改的配置项均在config/目录下,包括以下个:

  • server.properties
  • zookeeper.properties

我们依次说明其作用和配置项的代表的含义及如何修改配置。
1)server.properties
该配置项是kafka服务器的配置信息,目的是配置kafka的监听服务和配置认证方式。打开该文件,添加以下字段:

listeners=SASL_PLAINTEXT://172.20.36.103: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)zookeeper.properties
该配置项是zookeeper的配置信息,添加SASL的认证方式,打开该文件,在文件末尾直接添加:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

如下图:
在这里插入图片描述
到此,kafka和zookeeper的配置项已经修改完成。

3、添加认证配置项

上面2、段落完成了对kafka和zookeeper的认证配置之后,我们还需要配置认证的详细信息。原因诸如zookeeper只允许完成认证的kafka-broker访问,kafka的broker之间也通过认证互相访问,kafka的生产者和消费者客户端同样必须是认证过的才能访问kafka。

需要配置的项有两个(名称可以自定义),分别是:

  • zookeeper对kafka集群的认证配置:kafka_zoo_jaas.conf
  • kafka集群对其他连接broker的认证和kafka存储zookeeper认证密码的配置:kafka_server_jaas.conf

依次说明:
1) kafka_zoo_jaas.conf
该JAAS配置文件提供身份认证插件,并对登录zookeeper的kafka认证用户名和密码,创建kafka_zoo_jaas.conf文件,内容如下:

ZKServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret";
};

这里配置的应用名称为ZKServer,zookeeper默认的应用名称为Server,如何修改后面具体说明。
字段解释:
a. ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。多个zookeeper服务互相通信业需要身份的认证,由于我们只使用了单个的zookeeper服务,因此我们只定义了一个用户,若有多个需求则也定义多个。下面就是zookeeper内部认证的用户名和密码。
username=“admin”
password=“admin-secret”
b. zookeeper对登录的Kafka集群身份认证定义稍有不同,使用user_用户名=密码的方式。
user_admin=“admin-secret”
定义了一个用户名为admin,密码为admin-secret的用户。
2)kafka_server_jaas.conf
该JAAS配置文件提供两个功能:

  • kafka的各broker之间的认证;
  • 和zookeeper服务器的认证(用于zookeeper服务器登录的用户名和密码)

创建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";
};

a. Client 用于登录zookeeper时的认证,和本节1)中的用户名密码一致。
b. KafkaServer 两个功能,用户kafka内部broker之间的认证和定义用于kafka客户端的认证。
username=“geting”
password=“geting”
上面定义,用于kafka各broker之间的认证。

user_geting=“geting”
user_alice=“geting”;
上面定义了两个kafka客户端的身份认证,用户名为geting密码为geting的客户端和用户名为alice密码为geting的客户端。

到此为止,我们已经完成了对zookeeper和kafka的身份认证配置。

4.配置启动时需要的准备环境变量

通过上面的几个步骤之后,我们完成了基础的一些配置,要能启动成功还需要对环境变量进行配置。这里的环境变量其实是传递给java虚拟机的参数,用户JVM完成身份的认证,不是实际意义上的环境变量,为了描述方便我们以下段落均称为环境变量。
1)zookeeper环境变量设置和启动
zookeeper环境变量我们添加了两个,一个是启动时候的的身份认证JAAS文件的路径,另一个是我们修改了Zookeeper的默认应用名称(3-1中应用名被修改为ZKServer),所以变量为:

-Djava.security.auth.login.config=$ROOT/config/kafka_zoo_jaas.conf -Dzookeeper.sasl.serverconfig=ZKServer

Djava.security.auth.login.config 为身份认证JAAS配置文件
Dzookeeper.sasl.serverconfig 为修改应用的名称

整合环境变量和启动zookeeper时使用的zookeeper-server-start.sh这个脚本,我们重新写一个脚本,用于启动zookeeper并且添加我们定义的环境变量。
启动zookeeper脚本 start_zookeeper.sh,后台启动并且输出日志到logs下的zookeeper.log日志文件中:

#!/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 >> $ROOT/logs/zookeeper.log 2>&1 &

执行该脚本启动zookeeper服务。

2)kafka环境变量设置和启动
和上面所述一致,需要传递给JVM的参数为kafka各broker之间身份认证、kafka客户端身份认证的配置文件。

 -Djava.security.auth.login.config=$ROOT/config/kafka_server_jaas.conf

启动kafka服务脚本 start_kafka.sh,后台启动且输出日志到logs目录下的kafka.log日志文件中:

#!/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 >> $ROOT/logs/kafka.log 2>&1 &

执行该脚本启动kafka服务。
到此,我们完成了kafka服务的所有配置工作,不出意外的话已经成功启动基于sasl认证的kafka伪集群服务。

5.测试

该部分的配置文件只是针对在linux环境下使用kafka自带的shell脚本测试时使用,若使用第三方的库诸如librdkafka或者python的kafka库测试时是不需要该部分的。

使用kafka自带的shell脚本测试数据生产和消费是否正常。需要注意的是由于我们是需要SASL认证的,所以我们在使用脚本测试前需要做一些准备工作,准备三个配置项(为了方便我直接将身份认证配置文件写到了config/目录下,需要说明的是,不需要必须在config目录下):

  • 新建消费者/生产者登录kafka时的身份认证配置文件: kafka_client_jaas.conf
KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="alice"
    password="geting";
};

用户名和密码需要与3-2)中配置保持一致,文件名称可以自定义。

  • 修改生产者生产时配置文件
    在config/目录下的producer.properties文件末尾添加认证方式
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
  • 修改消费者消费时配置文件
    在config/目录下的consumer.properties文件末尾添加认证方式
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

和4段落一样,为了方便我们这里也设置环境变量,调用bin/kafka-console-producer.shbin/kafka-console-consumer.sh写成shell脚本,方便使用
1)消费数据脚本 start_consumer.sh

#!/bin/bash
ROOT=`dirname $0`
export KAFKA_OPTS=" -Djava.security.auth.login.config=$ROOT/config/kafka_client_jaas.conf"
$ROOT/bin/kafka-console-consumer.sh --bootstrap-server 172.20.36.103:9092 --topic test --from-beginning --consumer.config $ROOT/config/consumer.properties

执行脚本的结果:
在这里插入图片描述
2)生产数据脚本 start_producer.sh

#!/bin/bash
ROOT=`dirname $0`
export KAFKA_OPTS=" -Djava.security.auth.login.config=$ROOT/config/kafka_client_jaas.conf"
$ROOT/bin/kafka-console-producer.sh --broker-list 172.20.36.103:9092 --topic test --producer.config $ROOT/config/producer.properties

执行脚本的结果:
在这里插入图片描述
到此,完成了所有的搭建工作。

参考资料:
https://blog.csdn.net/u012842205/article/details/73188534
http://www.orchome.com/553
https://metron.apache.org/current-book/metron-sensors/bro-plugin-kafka/index.html

猜你喜欢

转载自blog.csdn.net/qq_30549833/article/details/84882154