Window Kafka-SASL/PALIN安装

Window Kafka-SASL/PALIN安装

前些天公司领导不知道心血来潮还是怎么地,让我们下属去研究Kafka。既然领导让我们去研究我们就去安装一个来玩玩。Kafka不配置认证权限很容易搞定,需要做权限认证需要多配置一点东西。
网上百度一下很多这类文章看的眼花缭乱,哎各种方法去尝试,终于弄成功了。我接下来把我搭建步骤分享一下,希望需要搭建的朋友少走歪路。Kafka认证机制很好几种,我下面选择Kafka + SASL/PALIN安全认证机制。

应用程序 版本
Kafka kafka_2.12-2.3.0
Zookeepe 3.4.14

我之前不打算使用Kafka自带的Zookeeper,看了很多网友写的博客说Kafka自带的Zookeeper不稳定。但是不使用Kafka自带的Zookeeper,Kafka + SASL/PALIN这种认证方式,Kafka就是不能连接上Zookeeper。
在这里插入图片描述
百度了很多关于这块的资料都没找到,我相信很多网友也会遇到这个问题。解决过这块问题的网友分享一下经验。网上找到一篇http://quabr.com/53156781/kafka-to-zookeeper-digest-md5-authentication-error ,但是解决方案说的不怎么详细。
在这里插入图片描述
好无助啊,解决过得大哥大姐们传授下你们的经验啊。或可发送[email protected]邮箱。

1.Zookeeper安装

我是用的是Kafka自带的Zookeeper,我本机遇到过这种问题,下载的Zookeeper 开启SASL认证方式,Kafka实例就是连接不上。最后我只能选择用的是kafka自带的ZK

1.1 修改zookeeper.properties

在这里插入图片描述
在这里插入图片描述

1.2 添加zookeeper_jaas.cfg文件

在config目录下创建一个zookeeper_jaas.cfg文件,文件内容如如下

Server {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    #username 和 password 是ZK之间通信用的
	username="admin" 
	password="admin-secret" 
	# user_ 前缀开头 用户名=kafka,用户密码=kafka-sec ,
	# 用户名=producer 用户密码=prod-sec 
	# 这个是kafka broker连接ZK的认证用户
	user_kafka="kafka-sec" 
	user_producer="prod-sec";
};

1.3 修改zookeeper-server-start.bat

我们不是创建了zookeeper_jaas.cfg文件文件吗?我们要把这个文件添加到运行环境中去。
在这里插入图片描述

IF ["%KAFKA_OPTS%"] EQU [""] (
    set KAFKA_OPTS=-Djava.security.auth.login.config=file:%~dp0../../config/zookeeper_jaas.cfg
)

Zookeeper服务启动

在这里插入图片描述

2.Kafka服务启动

2.1 server.properties

# ---- ACL AND RELATED STUFF
sasl.enabled.mechanisms=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
# Substitute with appropriate IP addresses:
listeners=SASL_PLAINTEXT://localhost:9092
advertised.listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

2.2 kafka_server_jaas.conf创建

在config目录下创建kafka_server_jaas.conf配置文件,内容如下

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    #username 和 password 是Kafka Broker之间通信用户
    username="admin"
    password="admin-sec"
    # 下面这些用户是 kafka-client验证用户 
    user_admin="admin-sec"
    user_producer="prod-sec"
    user_consumer="cons-sec";
};

Client {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    # 这个username 和 password 是Kafka Broker注册到ZK 用户验证,
    # 这个username 和 password 上面 zk_server_jaas.conf定义的用户
    username="kafka"
    password="kafka-sec";
};

2.3修改kafka-server-start.bat

我们需要把kafka_server_jaas.conf 添加到运行环境中,所以我们修改一下kafka-server-start.bat 去
在这里插入图片描述

IF ["%KAFKA_OPTS%"] EQU [""] (
    SET KAFKA_OPTS=-Djava.security.auth.login.config=file:%~dp0../../config/kafka_server_jaas.conf
)

2.3启动kafka服务实例

上述配置信息准备好后,我们就可以启动Kafka服务实例了,执行以下命令

.\kafka-server-start.bat ..\..\config\server.properties

在这里插入图片描述
在这里插入图片描述

3.常见异常

3.1 Zookeeper错误

Kafka自带zookeeper报错INFO Got user-level KeeperException when processing xxx Error Path:/brokers Error:KeeperErrorCode = NodeExists for /brokers (org.apache.zookeeper.server.PrepRequestProcessor)
问题描述:

按照kafka官方文档的操作步骤,解压kafka压缩包后。依次启动zookeeper,和kafka服务

kafka服务启动后,查看到zookeeper日志里有以下异常
在这里插入图片描述

问题原因及解决办法:

网上查找资料,找到zookeeper日志异常原因—这不是一个报错故障,只是一个user-level KeeperException。可以忽略不做处理的

kafka安装好后,第一次启动。zookeeper日志Error:KeeperErrorCode = NoNode for /config/topics/test,是因为kafka请求访问这个路径,但是这个路径还不存在,zookeeper就抛了这个error。kafka会创建这个topic,然后访问zookeeper里topic对应的路径,zookeeper日志抛出error NodeExists for /config/topics(kafka已经把topic创建好了),路径已经存在了。

综上所述,这些error是正常的日志信息,可以忽略。

网友给的解释的链接和截图:

https://stackoverflow.com/questions/43559328/got-user-level-keeperexception-when-processing
在这里插入图片描述

3.2 集群连接操作

我今天有一个困惑,Kafka 将一些元数据信息注册到ZK 。但是kafka 消费者、生产者配置为何使用 bootstrap-servers 而不是 zookeeper 服务器地址?
今天运气好找到一篇文章解析的挺好的,我贴出来分享一下。文章的源地址https://www.v2ex.com/amp/t/475490

  1. bootstrap servers 如其名,只需要配个两三个就行了,会自动发现其他 broker

  2. zookeeper 本来只是 Kafka 实现所需要的依赖,暴露给 kafka 使用者我觉得没必要

  3. Kafka 所有的信息可以通过 API 来获得

  4. 0.8 以前,消费进度是直接写到 zookeeper 的,consumer 必须知道 zookeeper 的地址。这个方案有性能问题,0.9 的时候整体大改了一次,brokers 接管了消费进度,consumer 不再需要和 zookeeper 通信了。

  5. 至于 producer, 我记得传进去的参数是 broker list, 是不会自动发现其它 brokers 的。

  6. 新版的 Kafka 使用一个选举出来的 controller 来监听 zookeeper,其他 node 再去和 controller 通信,这么做的目的是为了减少 zookeeper 的压力。bootstrap-servers 会自动发现其他 broker,这也是 bootstrap 的含义。

发布了16 篇原创文章 · 获赞 10 · 访问量 7944

猜你喜欢

转载自blog.csdn.net/mnicsm/article/details/104996155
今日推荐