Kafka配置3–Windows下配置Kafka集群

Kafka配置1–Windows环境安装和配置Kafka

Kafka配置2–Windows下配置Kafka的SASL-PLAIN身份验证

Kafka配置3–Windows下配置Kafka集群

Kafka配置4–Windows下配置Kafka的SSL证书

Kafka配置5–Windows下配置Kafka的集群+SASL+SSL

Kafka配置6–Windows下设置和增加SASL用户或用户权限

1、Zookeeper配置
这里我们以在同一台服务器配置3套Zookeeper为例,将Zookeeper分别安装到3个目录中
如:
D:\Net_Program\Net_Zookeeper
D:\Net_Program\Net_Zookeeper2
D:\Net_Program\Net_Zookeeper3
图片[1]-Kafka配置3–Windows下配置Kafka集群-一一网图片[1]-Kafka配置3–Windows下配置Kafka集群-一一网
1.1、编辑zoo.cfg
打开zoo.cfg文件(第一台服务器),修改或增加如下配置:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper/data-file
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper/data-log
# 监听端口
clientPort=2181

# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

说明:
server.1中的1代表每台服务器Zookeeper的唯一标识,值只能是1到255之间
localhost为各个集群服务器的IP地址
2888为通讯端口
3888为选举端口

第二台和第三台服务器配置如下所示:
第二台:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper2/data-file
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper2/data-log
# 监听端口
clientPort=2182

# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

第三台:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper3/data-file
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper3/data-log
# 监听端口
clientPort=2183

# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

格式:server.A = B:C:D
A:是一个数字,表示第几号服务器
B:服务器IP地址
C:是一个端口号,用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口
D:是在leader挂掉时专门用来进行选举leader所用的端口

1.2、创建myid文件
由于这里我们是来搭建集群,所以这里需要创建myid文件
因为我们之前已经在zoo.cfg中指定了数据的存放路径文件夹,如:dataDir=D:/Net_Program/Net_Zookeeper/data-file
所以在此我们只需要在文件夹data-file中新建名称为myid的文件,内容就是1.1中提到的server.1、server.2、server.3中的1、2或3

即:
在D:\Net_Program\Net_Zookeeper\data-file中新建名称为myid的文件(没有后缀),内容为1
在D:\Net_Program\Net_Zookeeper2\data-file中新建名称为myid的文件(没有后缀),内容为2
在D:\Net_Program\Net_Zookeeper3\data-file中新建名称为myid的文件(没有后缀),内容为3

1.3、启动服务
以管理员身份运行CMD(打开3个,用于启动3个Zookeeper服务),定位到3个Zookeeper安装目录下的bin目录,然后分别在3个窗口中输入zkService命令来启动这3个Zookeeper服务

然后我们就可以使用如下命令来测试3个Zookeeper服务是否已启动,如果为open则代表启动成功
nc -vz 192.168.2.200 2181
nc -vz 192.168.2.200 2182
nc -vz 192.168.2.200 2183

此处我们可以将3个Zookeeper服务设置为Windows的系统服务

总结:
上面的配置过程我们称之为“集群模式”,即:在3台服务器都配置一个Zookeeper(上面举的例子是在同一台演示的)
还有一种方式我们称之为“集群伪分布模式”,即:在同一台服务器配置3个Zookeeper

1.4、集群伪分布模式
1.4.1、配置文件修改
conf目录下复制三次zoo.cfg到同目录下,分别命名zoo1.cfg,zoo2.cfg,zoo3.cfg,对三个文件进行如下修改:
zoo1.cfg:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper/data-file/data1
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper/data-log/log1
# 监听端口
clientPort=2181
# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

zoo2.cfg:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper/data-file/data2
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper/data-log/log2
# 监听端口
clientPort=2182
# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

zoo3.cfg:

# 存放数据
dataDir=D:/Net_Program/Net_Zookeeper/data-file/data3
# 存放日志
dataLogDir=D:/Net_Program/Net_Zookeeper/data-log/log3
# 监听端口
clientPort=2183
# 配置集群服务
server.1=192.168.2.200:2881:3881
server.2=192.168.2.200:2882:3882
server.3=192.168.2.200:2883:3883
复制代码

1.4.2、修改zkServer.cmd
bin目录下复制三次zkServer.cmd到同目录下,分别命名zkServer1.cmd,zkServer2.cmd,zkServer3.cmd,对三个文件增加如下内容:
zkServer1.cmd:

set ZOOCFG=..\conf\zoo1.cfg
复制代码

zkServer2.cmd:

set ZOOCFG=..\conf\zoo2.cfg
复制代码

zkServer3.cmd:

set ZOOCFG=..\conf\zoo3.cfg
复制代码

1.4.3、创建myid文件
参考1.2,内容很简单,如下所示:
在D:\Net_Program\Net_Zookeeper\data-file\data1中新建名称为myid的文件(没有后缀),内容为1
在D:\Net_Program\Net_Zookeeper\data-file\data2中新建名称为myid的文件(没有后缀),内容为2
在D:\Net_Program\Net_Zookeeper\data-file\data3中新建名称为myid的文件(没有后缀),内容为3

1.4.4、启动服务
和1.3中说的步骤一样

2、Kafka配置
这里我们以在同一台服务器配置3套Kafka为例,将Kafka分别安装到3个目录中
如:
D:\Net_Program\Net_Kafka
D:\Net_Program\Net_Kafka2
D:\Net_Program\Net_Kafka3

2.1、编辑server.properties
打开server.properties文件(第一台服务器),修改或增加如下配置:

# kafka消息存放的路径
log.dirs=D:/Net_Program/Net_Kafka/kafka-data
# 唯一标识
broker.id=0
host.name=192.168.2.200
# 监听端口
port=9092
# 对应着3台Zookeeper的IP地址和端口
zookeeper.connect=192.168.2.200:2181,192.168.2.200:2182,192.168.2.200:2183
复制代码

第二台和第三台服务器配置如下所示:
第二台:

# kafka消息存放的路径
log.dirs=D:/Net_Program/Net_Kafka2/kafka-data
# 唯一标识
broker.id=1
host.name=192.168.2.200
# 监听端口
port=9093
# 对应着3台Zookeeper的IP地址和端口
zookeeper.connect=192.168.2.200:2181,192.168.2.200:2182,192.168.2.200:2183
复制代码

第三台:

# kafka消息存放的路径
log.dirs=D:/Net_Program/Net_Kafka3/kafka-data
# 唯一标识
broker.id=2
host.name=192.168.2.200
# 监听端口
port=9094
# 对应着3台Zookeeper的IP地址和端口
zookeeper.connect=192.168.2.200:2181,192.168.2.200:2182,192.168.2.200:2183
复制代码

注意:
如果上述3台服务器配置了SASL验证,需要将SASL的端口也要进行修改,如下所示:
第一台:
listeners=SASL_PLAINTEXT://192.168.2.200:9092
advertised.listeners=SASL_PLAINTEXT://192.168.2.200:9092

第二台:
listeners=SASL_PLAINTEXT://192.168.2.200:9093
advertised.listeners=SASL_PLAINTEXT://192.168.2.200:9093

第三台:
listeners=SASL_PLAINTEXT://192.168.2.200:9094
advertised.listeners=SASL_PLAINTEXT://192.168.2.200:9094

如果在启动某Kafka服务的时候,可能会出现如下所示的错误,原因是我们设置了log.dirs=D:/Net_Program/Net_Kafka3/kafka-data,
在kafka-data文件夹中会生成一个meta.properties文件,里面有一项配置为broker.id=0,这个0和我们启动的第二个Kafka中server.properties的broker.id=1不匹配
我这里之所以会出现这个错误,是因为在测试安装的时候,是直接把D:\Net_Program\Net_Kafka中所有的文件复制到D:\Net_Program\Net_Kafka2中来的,而D:\Net_Program\Net_Kafka中的kafka-data中在最开始已经存在了meta.properties这个文件,并且broker.id=0
如果是全新配置的情况下,是不会出现该问题的
解决办法,可以直接删除kafka-data文件夹中的所有内容

[2020-03-25 12:28:34,758] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentBrokerIdException: Configured broker.id 1 doesn't match stored broker.id 0 in meta.properties. If you moved your data, make sure your configured broker.id matches. If you intend to create a new broker, you should remove all data in your data directories (log.dirs).
        at kafka.server.KafkaServer.getOrGenerateBrokerId(KafkaServer.scala:762)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:223)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
        at kafka.Kafka$.main(Kafka.scala:84)
        at kafka.Kafka.main(Kafka.scala)
复制代码

2.2、启动服务
以管理员身份运行CMD(打开3个,用于启动3个Kafka服务),定位到3个Kafka安装目录,然后分别在3个窗口中输入**.\bin\windows\kafka-server-start.bat .\config\server.properties**命令来启动这3个Kafka服务

然后我们就可以使用如下命令来测试3个Kafka服务是否已启动,如果为open则代表启动成功
nc -vz 192.168.2.200 9092
nc -vz 192.168.2.200 9093
nc -vz 192.168.2.200 9094

此处我们可以将3个Kafka服务设置为Windows的系统服务

3、命令配置
到此,Kafka的集群环境就搭建好了
由于是集群操作,以前的Kafka操作命令就有所改变,如:
创建主题:
单机模式:

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TestTopic1
或
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TestTopic1
复制代码

集群模式:

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181,localhost:2182,localhost:2183 --replication-factor 1 --partitions 1 --topic TestTopic1
或
kafka-topics --create --zookeeper localhost:2181,localhost:2182,localhost:2183 --replication-factor 1 --partitions 1 --topic TestTopic1
复制代码

查询主题:
单机模式:

.\bin\windows\kafka-topics.bat --zookeeper localhost:2181 --list
或
kafka-topics --zookeeper localhost:2181 --list
复制代码

集群模式:

.\bin\windows\kafka-topics.bat --zookeeper localhost:2181,localhost:2182,localhost:2183 --list
或
kafka-topics --zookeeper localhost:2181,localhost:2182,localhost:2183 --list
复制代码

其他命令(如设置用户读写权限、分组权限等)操作也类似

4、测试

这里我们以C#为例,使用C#的Confluent.Kafka库来实现对Kafka消息的生产和消费

启动一个生产者、2个消费者,生产者的SASL账户和密码为quber、quber123456(quber有读和写的权限),第一个消费者的SASL账户和密码为quber1、quber123456(quber1只有读的权限,并且所属分组的权限为TestGroup1),第二个消费者的SASL账户和密码为quber2、quber123456(quber2有读和写的权限,并且所属分组的权限为TestGroup2),2个消费者所消费的主题都为TestTopic1。

这里需要注意的是,此处的2个消费者账号quber1和quber2在消费主题TestTopic时,他们所在的分组一定要不一样,否则后启动的消费者将无法消费信息,这一点在之前的文章“Kafka配置2–Windows下配置Kafka的SASL-PLAIN身份验证”中也提到过,需要特别注意。

测试效果如下图所示:

5、参考文档
kafka集群搭建(windows环境下):www.cnblogs.com/lentoo/p/77…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享