数据仓库组件之Kafka(一)
1、调整参数
安装Kafka,进行service.properties参数的调整(3台都进行调整)
# 每个机器的唯一表示,这个作用类似于zookeeper中的myid文件和HDFS中的slaves文件
broker.id=0
# 配置kafka和zookeeper之间的连接端口和列表,因为kafka是依赖于zookeeper的
zookeeper.connect=cdh01:2181,cdh02:2181,cdh03:2181
# 指定Kafka持久化消息的目录,Kafka可以把负载均匀地分配到多个目录下
log.dirs=/mnt/disk1/kafka/data1/kafka-logs,/mnt/disk1/kafka/data2/kafka-logs,/mnt/disk1/kafka/data3/kafka-logs
# 新增,避免删除topic带来很多意想不到的问题
auto.create.topics.enable = false
delete.topic.enable=true
# kafka服务监听的端口号
port=9092
# 当前机器主机名
host.name=cdh01
2、启动、关闭kafka
启动命令:
进入Kafka安装目录执行:
./bin/kafka-server-start.sh -daemon ./config/server.properties
停止命令:
./bin/kafka-server-stop.sh -daemon ./config/server.properties
3、Kafka压力测试
用 Kafka官方自带的脚本,对 Kafka进行压测。Kafka压测时,可以查看到哪个地方出
现了瓶颈(CPU,内存,网络 IO)。一般都是网络 IO达到瓶颈。
kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh
1)KafkaProducer压力测试
(1)在 Kafka安装目录/bin/ 下面有这两个文件。我们来测试一下
bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput 1000 --producer-props bootstrap.servers=cdh01:9092,cdh02:9092,cdh03:9092
说明:
record-size ===> 是一条信息有多大,单位是字节。
num-records ===> 是总共发送多少条 信息。
throughput ===> 是每秒多少条信息,设成-1,表示不限流,可测出生产者最大吞吐量。
参数解析:本例中一共写入 10w条消息,每秒向 Kafka写入了 0.10MB的数据,平均
是 1000条消息/秒,每次写入的平均延迟为 0.33毫秒,最大的延迟为 336毫秒。
2)KafkaConsumer压力测试
Consumer的测试,如果这四个指标(IO,CPU,内存,网络)都不能改变,考虑增加
分区数来提升性能。
bin/kafka-consumer-perf-test.sh --broker-list cdh01:9092,cdh02:9092,cdh03:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1
参数说明:
–zookeeper ===> 指定 zookeeper的链接信息
–topic ===> 指定 topic的名称
–fetch-size ===> 指定每次 fetch的数据的大小
–messages ===> 总共要消费的消息个数
参数解析:
开始测试时间 start.time: 2020-12-28 20:15:41:099,
测试结束数据 end.time: 2020-12-28 20:15:52:352,
共消费数据(MB) data.consumed.in.MB: 9.5367M,
吞吐量(MB/S) MB.sec: 0.8475,
共消费(条) data.consumed.in.nMsg: 100000,
平均每秒消费(条) nMsg.sec: 8886.5192,
再平衡时间(ms) rebalance.time.ms: 1609157741448,
fetch平均时间(ms) fetch.time.ms: -1609157730195,
fatch平均大小(MB/s) fetch.MB.sec: -0.0000,
fatch平均条数(条) fetch.nMsg.sec: -0.0001
4、操作topic
1)查看topic列表
bin/kafka-topics.sh --list --zookeeper cdh01:2181,cdh02:2181,cdh03:2181
2)创建topic
bin/kafka-topics.sh --create --zookeeper cdh01:2181,cdh02:2181,cdh03:2181 --replication-factor 1 --partitions 1 --topic test
3)查看topic信息
bin/kafka-topics.sh --describe --zookeeper cdh01:2181,cdh02:2181,cdh03:2181 --topic test
4)Kafka不停机修改某一个topic数据保存时间
bin/kafka-configs.sh --zookeeper cdh01:2181,cdh02:2181,cdh03:2181 --alter --entity-name test --entity-type topics --add-config retention.ms=60000
5)查看指定group下topic的堆积数量
bin/kafka-consumer-groups.sh --bootstrap-server cdh01:2181,cdh02:2181,cdh03:2181 --describe --group track-consumer-group
6)删除topic
bin/kafka-topics.sh --delete --zookeeper cdh01:2181,cdh02:2181,cdh03:2181 --topic test
彻底删除topic,在Kafka的service.properties中添加参数(已配置)
1)auto.create.topics.enable = false
默认设置为true。如果设置为true,则produce或者fetch 不存在的topic也会自动创建这个topic。这样会给删除topic带来很多意向不到的问题。
2)delete.topic.enable=true
如果没有设置 delete.topic.enable=true,则调用kafka 的delete命令无法真正将topic删除,而是显示(marked for deletion)
3)调用命令删除topic:
bin/kafka-topics.sh --delete --zookeeper cdh01:2181,cdh02:2181,cdh03:2181 --topic test
4)删除kafka存储目录(server.properties文件log.dirs配置,默认为"/data/kafka-logs")相关topic的数据目录。
注意:如果kafka 有多个 broker,且每个broker 配置了多个数据盘(我们配置地址为 /mnt/disk1/kafka/data1/kafka-logs,/mnt/disk1/kafka/data2/kafka-logs,/mnt/disk1/kafka/data3/kafka-logs),且topic也有多个分区和replica,则需要对所有broker的所有数据盘进行扫描,删除该topic的所有分区数据。
5)找一台部署了zk的服务器
登陆zookeeper客户端
bin/zkCli.sh -server cdh01:2181,cdh02:2181,cdh03:2181
rmr /brokers/topics/【topic name】
7)生产者
bin/kafka-console-producer.sh --broker-list cdh01:9092,cdh02:9092,cdh03:9092 --topic test1
8)消费者
bin/kafka-console-consumer.sh --bootstrap-server cdh01:9092,cdh02:9092,cdh03:9092 --topic test --from-beginning
9)查看Kafka主题当前偏移量
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list cdh01:9092,cdh02:9092,cdh03:9092 --topic test
6、Kafka-manager
1)调整application.conf文件
vim /conf/application.conf
修改kafka-manager.zkhosts列表为自己的zk节点
kafka-manager.zkhosts="cdh01:2181,cdh02:2181,cdh03:2181"
2)启动kakfa-manager
kafka-manager 默认的端口是9000,可通过 -Dhttp.port,指定端口; -Dconfig.file=conf/application.conf指定配置文件:
进入Kafka-manager的安装目录执行
bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=9080 -Dflume.root.logger=INFO,console &
3)UI页面配置
ip:9080
1)
2)
3)
4)
Kafka-manager的描述说明:
.
.
.
.
.
下面是我的公众号,收集了现在主流的大数据技能和架构,欢迎大家一起来学习交流。