Windows环境中Kafka的安装及使用

1. 简介

Kafka是一种高吞吐量的分布式发布——订阅消息系统。

2.环境搭建

2.1安装JDK(例如JDK1.8等)

2.2 安装Zookeeper

Zookeeper下载地址
下载后,解压放在目录D:\SoftWare\Kafka\zookeeper-3.4.14(本文所用的目录)下,关于zookeeper以及kafka的目录,路径中最好不要出现空格,比如D:\Program Files,尽量别用,运行脚本时会有问题。

(1)进入zookeeper的相关设置所在的文件目录,例如本文的:D:\SoftWare\Kafka\zookeeper-3.4.14\zookeeper-3.4.14\conf
(2)将"zoo_sample.cfg"重命名为"zoo.cfg"
(3)打开zoo.cfg(至于使用什么编辑器,根据自己喜好选即可),找到并编辑
dataDir=/tmp/zookeeper ——> D:/SoftWare/Kafka/zookeeper-3.4.14/Data 或 D:\SoftWare\Kafka\zookeeper-3.4.14\Data
(注:路径要么是"/“分割,要么是转义字符”\",这样会生成正确的路径(层级,子目录))
(4)添加环境变量“D:\SoftWare\Kafka\zookeeper-3.4.14\zookeeper-3.4.14\bin”
(5)在zoo.cfg文件中修改默认的Zookeeper端口(默认端口2181)
(6)打开cmd窗口,输入zkserver,运行Zookeeper,运行结果如下:在这里插入图片描述
恭喜,Zookeeper已经安装完成,已在2181端口运行。

2.3 安装Kafka

Kafka下载地址
要下载Binary downloads这个类型,不要下载源文件,这种方便使用。下载后,解压放在D:\SoftWare\Kafka\kafka_2.11-2.4.0目录下。

(1)进入kafka配置文件所在目录,D:\SoftWare\Kafka\kafka_2.11-2.4.0\config
(2)编辑文件"server.properties",找到并编辑:
log.dirs=/tmp/kafka-logs ——> log.dirs=D:/SoftWare/Kafka/kafka_2.11-2.4.0/kafka-logs 或
log.dirs=D:\SoftWare\Kafka\kafka_2.11-2.4.0\kafka-logs
(注:路径要么是"/“分割,要么是转义字符”\",这样会生成正确的路径(层级,子目录))
(3)在server.properties文件中,zookeeper.connect=localhost:2181代表kafka所连接的zookeeper所在的服务器IP以及端口,可根据需要更改。本文在同一台机器上使用,故不用修改。
(4)kafka会按照默认配置,在9092端口上运行,并连接zookeeper的默认端口2181。

2.4 运行Kafka

提示:请确保启动kafka服务器前,Zookeeper实例已经在运行,因为kafka的运行是需要zookeeper这种分布式应用程序协调服务。

(1)进入kafka安装目录: D:\SoftWare\Kafka\kafka_2.11-2.4.0
(2)在地址栏中输入“cmd”然后回车,进入命令行 或者 按下shift+鼠标右键,选择"在此处打开命令窗口",打开命令行。
(3)在命令行中输入:.\bin\windows\kafka-server-start.bat .\config\server.properties,然后回车
在这里插入图片描述
到目前为止,zookeeper以及kafka都已正确运行。保持运行状态,不要关闭。

重要(操作日志的处理):
kafka启动后,如果你去查看kafka所在的根目录,或者是kafka本身的目录,会发现已经默认生成一堆操作日志(这样看起来真心很乱):在这里插入图片描述
而且会不断生成不同时间戳的操作日志。刚开始不知所措,一番研究后,看了启动的脚本内容,发现启动的时候是会默认使用到这个log4j.properties文件中的配置,而在zoo.cfg是不会看到本身的启动会调用到这个,还以为只有那一个日志路径:在这里插入图片描述
在这里配置一下就可以了,找到config下的log4j.properties,将路径更改下即可,这样就可以归档在一个文件夹下边了,路径根据自己喜好定义:在这里插入图片描述

另外如何消除不断生成日志的问题,就是同一天的不同时间会不停生成。
修改这里,还是在log4j.properties中:在这里插入图片描述
本身都为trace,字面理解为会生成一堆跟踪日志,将其改为INFO即可。

2.5 创建主题

(1)创建主题,命名为"test0924",replicationfactor=1(因为只有一个kafka服务器在运行)。可根据集群中kafka服务器个数来修改replicationfactor的数量,以便提高系统容错性等。
(2)在D:\SoftWare\Kafka\kafka_2.11-2.4.0\bin\windows目录下打开新的命令行;
(3)输入命令:kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test0924,然后回车
在这里插入图片描述
该窗口可以关闭。

(4)查看创建的主题列表
kafka-topics.bat --list --zookeeper localhost:2181在这里插入图片描述

2.6 创建生产者(producer)和消费者(consumer)

(1)在D:\SoftWare\Kafka\kafka_2.11-2.4.0\bin\windows目录下打开新的命令行;
(2)输入命令,启动producer:
kafka-console-producer.bat --broker-list localhost:9092 --topic test0924在这里插入图片描述
(3)同样在该目录下打开新的命令行。输入命令,启动consumer:
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test0924 --from-beginning在这里插入图片描述
(4)现在生产者、消费者均已创建完成。在producer命令行窗口中任意输入内容,然后回车。在consumer命令行窗口中即可看到相应的内容。
在这里插入图片描述

2.8 关闭Kafka服务

(1)进入kafka安装目录: D:\SoftWare\Kafka\kafka_2.11-2.4.0
(2)在地址栏中输入“cmd”然后回车,进入命令行 或者 按下shift+鼠标右键,选择"在此处打开命令窗口",打开命令行。
(3)在命令行中输入:.\bin\windows\kafka-server-stop.bat .\config\server.properties,然后回车在这里插入图片描述

2.9 关闭Zookeeper服务

(1)进入kafka安装目录: D:\SoftWare\Kafka\kafka_2.11-2.4.0
(2)在地址栏中输入“cmd”然后回车,进入命令行 或者 按下shift+鼠标右键,选择"在此处打开命令窗口",打开命令行。
(3)在命令行中输入:.\bin\windows\zookeeper-server-stop.bat .\config\server.properties,然后回车
在这里插入图片描述

3.常用的Kafka命令

#列出主题
kafka-topic.bat -list -zookeeper localhost:2181  

#描述主题  
kafka-topics.bat -describe -zookeeper localhost:2181 -topic [topic name]   

#从头读取消息
kafka-console-consumer.bat -zookeeper localhost:2181 -topic [topic name] -from-beginning 

#删除主题
kafka-run-class.bat kafka.admin.TopicCommand -delete -topic [topic_to_delete] -zookeeper localhost:2181  
#查看topic的详细信息 
./kafka-topic.sh -zookeeper localhost:2181 -describe -topic  [topic name]    

#为topic增加副本
./kafka-reassign-partitions.sh -zookeeper localhost:2181 -reassignment-json-file json/partitions-to-move.json -execute  

#为topic增加partition
./bin/kafka-topics.sh -zookeeper localhost:2181 -alter -partitions 20 -topic [topic name]   

#下线broker
./kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper localhost:2181 broker [brokerId] --num.retries 3 --retry.interval.ms 60  shutdown broker 

#luanch console producer, and specifiy the parse key, the key and value is splited by blank symbol
kafka-console-producer.sh --broker-list server-1:9092,server-2:9092,server-3:9092 --topic kafka-action --property parse.key=true --property key.separator=' '

#alter topic    config-test ,  sets the property segment.bytes to 200MB
kafka-topics.sh --alter --zookeeper server-1:2181,server-2:2181,server-3:2181  --topic config-test --config segment.bytes=209715200

#alter topic    config-test ,  delete the property config segment.bytes
kafka-topics.sh --alter --zookeeper server-1:2181,server-2:2181,server-3:2181  --topic config-test --delete-config segment.bytes=209715200

#查看主题当前己覆盖的配置
kafka-topics.sh --alter --zookeeper server-1:2181,server-2:2181,server-3:2181  --topics-with-overrides --topic config-test 

#view the partitions with status under replicated
kafka-topics.sh --describe --zookeeper server-1:2181,server-2:2181,server-3:2181  --under-replicated  partitions

#查看(某个特定)主题的哪些分区的Leader 己不可用
kafka-topics . sh --describe --zookeeper server-1:2181,server-2:2181,server-3:2181  --unavailablepartitions   [--topic  {topic_name}]

#查看某个主题各分区对应消息偏移量,time 参数表示查看在指定时间之前的数据,支持-1(latest),-2 (earliest) 两个时间选项,默认取值为-l 。
kafka-run-class.sh kafka . tools.GetOffsetShell --broker - list server-1:9092,server-2:9092,server-3:9092 --topic kafka- action --time -1

#查看kafka日志消息,
#files 是必传参数,用于指定要转储( dump )文件的路径, 可同时指定多个文件,多个文件路径之间以逗号分隔。
kafka-run- class.sh kafka.tools.DumpLogSegments --files /opt/data/kafka-logs/producer-create-topic-0/00000000000000000000.log  --print-data-log

#性能测试工具,向一个名为producer-perιtest的主题发送100 万条消息,每条消息大小为1000字节,
kafka-producer-perf-test.sh --num-records 1000000 --record-size 1000  --topic producer-perf-test --throughput 1000000 \
--producer-props  bootstrap.servers=server-1:9092,server-2:9092,server-3:9092 acks=all

#老版本consumer消费kafka-action数据,offset保存在zookeeper中,并在结束时删除offsets
kafka-console-consurner.sh --zookeeper server-1:2181,server-2:2181,server-3:2181 --topic kafka-action --consumer-property group.id=old-consumer-test  --consumer-property consumer.id=old-consumer-cl  \--from-beginning  --delete-consumer-offsets

#新版本consumer消费kafka-action数据,默认offset保存在kafka的__consumer-offsets内部主题中
#若以参数bootstrap-server方式启动,则默认调用的是新版消费者,此时可以不用设置new-consumer 参数
kafka-console consumer.sh -bootstrap-server server-1:9092,server-2:9092,server-3:9092 --new-consumer --consumer-property group.id=new-consumer-test \
--consumer-property client.id=new-consumer-cl --topic kafka-action

#查看主题ka:fka-action 各分区的偏移量信息
#time 参数表示查看在指定时间之前的数据,支持-1(latest),-2 (earliest) 两个时间选项,默认取值为-l 。
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list server-1:9092,server-2:9092,server-3:9092 --topic kafka-action -time -1

#查看__consumer-offsets主题编号为6的分区的信息
kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 6 --broker-list server-1:9092,server-2:9092,server-3:9092 --formatter
"kafka.coordinator.GroupMetadataManager\$0ffsetsMessageFormatter"

#同时消费多个主题
kafka-console-consumer.sh --bootstrap-server server-1:9092,server-2:9092,server-3:9092 --new-consumer --consumer-property group.id=consume-multi-topic 
--whitelist  "kafka-action|producer-perf-test"

#查看消费组的消费偏移量,如果待查询消费组的状态维Dead,则无法查看到
kafka-consumer-groups.sh --bootstrap-server  server-1:9092,server-2:9092,server-3:9092 --describe --group consumer-offset-test  --new-consumer

#删除消费组
kafka-consumer-groups.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --delete--group old-consumer-test

#消费者性能测试工具, 还可以通过--consumer.config加载property文件来设置属性
kafka-consumer-perf-test.sh --broker-list server-1:9092,server-2:9092,server-3:9092 --threads 5 --messages 1000000 --message-size 1000 \
--num-fetch-threads 2  --group consumer-perf-test --topic producer-perf-test --new-consumer

#查看指定主题所有的覆盖配置
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181   --describe-entity-type topics --entity-name config-test 

#增加特定主题的配置,如果有多个配置,以逗号分隔如--alter --add-config flush.messages=2,max.message.bytes=102400
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181   --describe-entity-type topics --entity-name config-test  --alter \
--add-config flush.messages=2


#删除配置
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181   --describe-entity-type topics --entity-name config-test   --alter --delete-config flush.messages,max.message.bytes

#broker限流:对server-1对应的代理(broker.id=1)上分布的Leader副本和Follower副本的复制速率控制为10MB/s
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --entity-type brokers --entity-name 1 --alter --add-config follower.replication.throttled.rate=l0485760,leader.replication.throttled.rate=l0485760

#boker限流:查看broker-1的限制配置信息
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --entity-type brokers  --entity-name 1  --describe

#broker限流:删除配置
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --entity-type brokers --entity-name 1 --alter --delete-config follower.replication.throttled.rate,leader.replication.throttled.rate

#主题级别限流
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181 --entity-type topics --entity-name kafka-action --alter \--add-config  leader.replication.throttled.replicas=[O:l,1:2,2:3],follower.replication.throttled.replicas=[0:2,1:3,2:1]

#客户端流控:为用户lenmom添加限流,前提:kafka集群添加了认证机制,否则不可用此法
kafka-configs.sh --zookeeper  server-1:2181,server-2:2181,server-3:2181 --alter --add-config  'producer_byte_rate=l024,consumer_byte_ rate=2048'  \
--entity-type users  --entity-name lenmom

#客户端流控:查看用户流控信息
kafka-configs.sh --zookeeper server-1:2181,server-2:2181,server-3:2181    describe --entity-type users

#客户端流控:在producer/consumer的clientid等于acl-client时,该配置将会生效
kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'producer_byte_rate=l024 , consumer_byte_rate=2048'   --entity type clients \
--entity-name acl-client

#客户端流控:为用户lenmom的客户端user-client-config添加流控
kafka-configs.sh --zookeeper  server-1:2181,server-2:2181,server-3:2181  --alter --add-config  'producer byte_rate=1024,consumer_byte_rate=2048' \
 --entity-type users --entity-name lenmom --entity-type clients --entity-name user-client-config

#leader平衡,对topic:kafka-action的分区1进行再平衡 
#echo '{"partitions": [{"topic":"kafka-action","partition": 1}]}' >partitions-leader-election.json  
kafka-preferred-replica-election.sh --zookeeper server-1:2181,server-2:2181,server-3:2181 --path-to-json-file   partitions-leader-election.json

#节点下线&分区迁移, 下线broker2
#topics-to-move.json:  其中,version为固定值
#{"topics":[{"topic":"reassign-partitions"}],"version":1} 
kafka-reassign-partitions.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --topics-to-move-json-file  ../config/topics-to-move.json \
--broker-list " 1,3"   --generate


#增加指定主题的分区数
kafka-topics.sh   --alter  --zookeeper server-1:2181,server-2:2181,server-3:2181 --partitions 6 --topic kafka-action

#增加指定主题的副本数,需要事先准备副本分配json文件
kafka-reassign-partitions.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --reassignment-json-file .. /config/replica-extends.json --execute

#查看分区副本重分配执行状态
kafka-reassign-partitions.sh --zookeeper server-1:2181,server-2:2181,server-3:2181  --reassignment-json-file .. /config/replica-extends.json --verify
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值