kafka集群 + manager监控

Kafka基本原理详解(超详细):https://blog.csdn.net/weixin_45366499/article/details/106943229

 

什么是kafka

kafka是一个分布式、流数据处理系统。可以作为消息中心,但经典的应用场景还是应用服务的数据收集,大型网站用户浏览登录等一系列动作操作流数据的收集,配合ELK做数据、日志收集分析处理。以及搭配hadoop大数据使用。

 

1. 环境准备

zookeeper集群安装可参考:https://blog.csdn.net/yuanlaijike/article/details/79916792

提前安装zk集群
主机名IP说明
master192.168.56.104zk flower节点
slave1192.168.56.102zk master节点
slave2192.168.56.105zk flower节点
环境版本
说明
服务器centos7
kafka2.7.0
kafka集群至少准备3台机器
主机名IP说明
master192.168.56.104kafka节点1
slave1192.168.56.102kafka节点2
slave2192.168.56.105kafka节点3

 

关闭防火墙

$ systemctl stop firewalld    #关闭防火墙

$ systemctl disable firewalld    #禁止开机启动

 

2. 下载&安装

准备安装目录

[root@master local]# pwd
/root/local

$ mkdir kafka    #新建应用目录

$ mkdir kafka/logs    #消息存储目录

$ chmod 777 -R kafka/    #授予所有人权限

github当前最新版本是2.7.0

# 下载2.7.0安装包
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.0/kafka_2.13-2.7.0.tgz


# 解压到安装目录
$ tar -zxvf kafka_2.13-2.7.0.tgz -C /root/local/kafka

 

3. 修改配置

$ cd kafka/kafka_2.13-2.7.0

$ vim config/server.properties

通用配置

#kafka会留存所有消息,存放到每个分区下的segment目录下的.log文件中。这个log目录就是kafka的数据目录。可配置多个,逗号分隔
log.dirs=/root/local/kafka/logs

# zookeeper集群配置
zookeeper.connect=192.168.56.104:2181,192.168.56.102:2181,192.168.56.105:2181

分节点配置broker.id,必须保证每个节点的id唯一:

kafka节点1

broker.id=0

kafka节点2

broker.id=1

kafka节点3

broker.id=2

 

修改启动脚本,vim bin/kafka-server-start.sh:

调小内存消耗,-XX:ParallelGCThreads=1设置核数(我虚拟机是1核),否则启动后使用kafka命令时总会告警。我们提前修改就省得待会再改再重启了,告警如下:

 

4. 启动

# 用&表示后台启动
$ ./bin/kafka-server-start.sh config/server.properties &

启动成功后控制台有如下输出。

3台机器分别启动以后,集群搭建完成。我们继续看一下kafka集群在zookeeper的注册目录:

# 进入zookeeper集群任一节点安装目录,执行命令进入客户端
$ ./zkCli.sh

# 查看根目录
$ ls /

可以发现,除了zookeeper这个目录是zk集群注册添加的,其他目录都是kafka集群注册的。

 

5. 使用命令行操作kafka

请注意:以下命令行中 --bootstrap-server master:9092 效果等同于 --zookeeper master:2181,指定kafka server或者注册中心其一且只能指定其一。如果这两个参数同时指定还会报错。

 

5.1 创建topic

$ ./kafka-topics.sh --create --bootstrap-server master:9092 --partitions 3 --replication-factor 1 --topic esign-service    # topic默认是1个分区1个副本;现指定3个分区,每个分区创建1个副本备份

结果:指定多个分区后,分区随机散落在broker节点的数据目录。如果是1个分区,会随机放在某一borker的kafka数据目录下。这个数据目录就是我们刚才配置过的“log.dirs”。看下图,我们刚才创建的topic=esign-service,指定了3个分区,那这3个分区就是esign-service-0, esign-service-1, esign-service-2。这3个文件夹分别分布在3个kafka节点的数据目录中。

 

5.2 查看topic列表

$ ./kafka-topics.sh -bootstrap-server master:9092 --list

 

5.3 查看topic详情

$ ./kafka-topics.sh --bootstrap-server master:9092 --describe --topic esign-service

 

5.4 向topic发送消息

$ ./kafka-console-producer.sh --bootstrap-server master:9092 --topic esign-service

 

5.5 消费消息

$ ./kafka-console-consumer.sh --bootstrap-server master:9092 --topic esign-service --from-beginning    #能收到之前的消息,且能持续监听

 

5.6 指定消费者组,消费topic。可以打开多个命令窗口,共同执行以下命令;再起一个非消费者组的消费者。

$ ./kafka-console-consumer.sh --bootstrap-server master:9092 --topic esign-service --group service_group

测试结果:消费者组共同消费同一个topic,消息被组内成员随机消费。但并不影响消费者组外消费者消费全部消息。

 

5.7 查看消费者组列表

$ ./kafka-consumer-groups.sh --bootstrap-server master:9092 --list

 

5.8 查看消费者组在topic分区内的偏移量

$ ./kafka-consumer-groups.sh --bootstrap-server master:9092 --describe --group service_group

执行结果如下:

  1. 可以看到基于订阅发布模式,为什么topic分区内的只能被组内成员之一消费。因为相对于这个组来说,任一成员消费后。该组在topic具体分区内的偏移量都在变化。其他组内成员再来取消息,也只能是没被消费过的消息。

 

5.9 解码查看分区内数据文件明文,注意替换自己的数据文件目录

$ ./kafka-run-class.sh kafka.tools.DumpLogSegments --files /root/local/kafka/logs/esign-service-1/00000000000000000000.log  --print-data-log

执行结果如下:

 

5.10 查看分区下的索引文件

$ ./kafka-run-class.sh kafka.tools.DumpLogSegments --files /root/local/kafka/logs/esign-service-1/00000000000000000000.index

 

6. 使用Docker安装kafka监控软件

 

拉取镜像

$ docker pull sheepkiller/kafka-manager

启动容器

$ docker run -d -p 9000:9000 --name kafka-manager -e ZK_HOSTS=192.168.56.104:2181 sheepkiller/kafka-manager

 

访问 ip:9000,添加kafka集群

 

配置完成后就可以登录集群了

 

测试一下动态添加分区

继续添加分区,详情:

点击添加。我们不需要任何命令,就可以在kafka服务器(1-slave1,即192.168.56.102)上看到有日志输出,效果如下:

我们再查看一下这台有日志输出的,kafka数据目录下的内容,可以看到。对topic=test,已经添加了第3个分区文件夹。名为test-2。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值