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.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环境下):https://www.cnblogs.com/lentoo/p/7785004.html

猜你喜欢

转载自blog.csdn.net/qubernet/article/details/105094601