适合小公司的 kafka日常管理脚本(上)

前言

在小小的公司里,既缺巨牛,又缺物料,还缺必要的可视化管理工具。但这些不是工作路上的拦路虎;条条大路通罗马,但只选适合当下的路。面对小公司无统一的技术栈,也没有统一的管理工具,先选择最快的命令行工具,人肉手工完成相关工作。这其中就包括对kafka日常管理和监控。(幸好kafka提供了管理脚本,否则我只能哭晕在厕所里了)

kafka日常管理命令

环境配置,随心所欲执行kafka脚本

kafka所有的命令脚本,都在安装目录\bin 下; 如果记忆不好,也不想每次登录linux后,cd到这个bin目录;也为了节省自身时间,建议把这个安装目录加入到 系统的path里。这样你就可以在linux的任何目录随心所欲的执行kafka脚本了。

**添加步骤 **

  • 打开linux环境配置文件
    vim /etc/profile
  • 在文件最后一行,添加以下脚本。注意把安装目录替换为自身的kafka安装目录
    export PATH=安装目录/bin:$PATH
  • 执行生效命令
    source /etc/profile

topic 相关命令

kafka-topics.sh 脚本是一个使用不是非常频繁,但是很重要的命令。可以对topic进行管理:比如对topic进行crud操作。而我一般在两种场景下经常使用这个命令

  • 想要按照自身的高可用诉求 去创建某个topic?
css 复制代码
 kafka-topics.sh --create --zookeeper ip:port{chroot} --replication-factor 2 --partitions 3 --topic orderInfo

命令解释
ip:port{chroot}

这里填写zookeeper的ip和端口号,以及chroot。chroot是kafka元数据存放到zk的路径;如果你的元数据存在zk的根路径,则可以不写;但一般不建议这样做。
replication-factor

复制因子,分区副本数。这里建议设置大于等于2 ;如果设置为1,则表示只有主分区,没有复制分区,那么当主分片所在broker宕机,则分片不可用;影响topic的高可用。
partitions

分区数。分区数影响topic在broker集群的数据分布和topic处理的吞吐量。如果你的topic的消息数非常大,比如每秒上W或者上千条 那么建议此值越大越好;但不建议超过broker 节点数。
topic

指定主题名字

虽然kafka不用刻意的去创建主题,在发消息时会自动创建主题;但还是建议你,手工添加。因为kafka自动创建的主题,是根据集群配置的参数默认创建的。很有可能集群配置的分区副本数是1,这样你的主题就不具备高可用了。 之前接手过一个kafka集群,分区副本数默认就是1,而管理上的不规范导致所有topic 都是自动创建;恰好这个集群的机器又用了很多年,早都过了维保期了,某台broker 机器在某天突然硬盘出了问题,导致IO 飙高。幸好不是宕机,否则消费者都不能消费消息了。

  • 想要看看某个topic的分区是不是具备高可用了?
css 复制代码
   kafka-topics.sh --describe --zookeeper ip:port{chroot} --topic orderInfo_test

输出结果:

命令解释
--zookeeper

见上条命令解释
topic

见上条命令解释

从输出结果,可以看到topic orderInfo_test 有3个分区,每个分区只有1个复制集。所以不具备高可用。那么主题创建好了,想要扩(收缩)分区,或者扩(收缩)副本集,怎么办了?可以参考另外一篇文章《生产环境 kafka 平滑迁移之旅》

生产者相关命令

kafka-console-producer.sh 命令是一个相对使用较频率的命令。我一般在进行测试验证,需要 自己制作一条消息,或者进行问题排查时,又或者功能联调时使用的较多

  • 和上游约定好了消息格式,想要进行联调怎么办了?----发送消息
shell 复制代码
       kafka-console-producer.sh --broker-list {brokerIP} --topic orderInfo_test

命令解释
{brokerIP}

kafka broker 集群地址。比如我测试环境地址: 10.70.71.26:9092,10.70.71.27:9092,10.70.71.28:9092
topic

topic名词,你需要发送消息到那个topic

发送消息还可以用在,当线上某个消费业务有问题;而需要把消息回放到测试环境进行验证时,非常有用。比如可以 根据消息关键字过滤出线上消息后,到测试环境回放该消息。

消费者相关命令

kafka-console-consumer.sh 命令是一个使用较频繁的命令。在日常管理里,比生产者脚本使用的还频繁

  • 想要去抓取线上的消息,又不想影响实际的生产业务怎么办了?
    可以指定消费组进行消费。
css 复制代码
kafka-console-consumer.sh --bootstrap-server {brokerIP}  --topic orders_kafka --consumer-property group.id=test-orders_kafka

命令解释:
{brokerIP}

参照上条命令解释
topic

照上条命令解释
group.id

是消费者参数定义之一,主要是指定消费组的名字。如果没有指定的话,每次运行Console Consumer,它都会自动生成一个新的消费者组来消费。久而久之,你会发现你的集群中有大量的以console-consumer开头的消费者组。建议加上此配置

  • 线上消息太多了,如何根据消息特征去抓取某个消息?
    假设一个topic的消息太多了,100条/s,只靠上面那个命令去消费消息,估计在屏幕上滚动打印的消息能让你的眼睛都模糊的(太伤眼了)。此时,可以根据消息关键字过滤消息
css 复制代码
kafka-console-consumer.sh --bootstrap-server {brokerIP}  --topic orders_kafka --consumer-property group.id=test-orders_kafka |grep "101231231232"

假设这是条订单消息,101231231232 是订单号;那么可以通过linux的管道过滤和字符串匹配命令grep,可以让你的linux终端,只输出101231231232这个订单消息。有没有整个世界都清净的赶脚。

消费组相关命令

kafka-consumer-groups.sh 命令。主要是和消费组相关的命令。

  • 想要查看当前kafka集群有哪些消费组了?
css 复制代码
kafka-consumer-groups.sh --bootstrap-server {brokerIP} --list

命令解释:
{brokerIP}

参照上条命令解释

  • 想要看看我的消息组消费消息有延迟吗?消费的性能咋样了?
css 复制代码
  kafka-consumer-groups.sh --bootstrap-server {brokerIP}  --describe --group  test-orders_kafka

输出:

命令解释:
{brokerIP}

参照上条命令解释
group

消费组名称

结果解释:
topicID

消费组,消费的哪些topic。一个消费组可以指定消费多个topic,我这里是消费了2个topic
PARTITION

topic 所在的分区号
CURRENT-OFFSET

当前消费组消费到此topic,分区上,最后一条消息的偏移量
LOG-END-OFFSET

当前topic,在分区上,最后一条消息的偏移量
LAG

当前消费组,在该topic,分区上的延迟消费数。第一行看到是0,即消费者及时的消费了分区上的消息;第二行看到此列是4,即当前消费组落后最新消息4条。一般不是上几十个,或者上百,上W的延迟,都能接受。当然也要看消费者的业务对及时性的诉求了;如果延迟比较大;可以考虑增加消费者,提高消息消费的并行度,来提升消费速度,降低延迟。

其它命令

kafka 0.10.2 总共有29个命令;待后续实际使用到再分享给大家。

总结

在缺乏可视化管理工具的前提下,可利用 kafka 自带的脚本命令,完成对kafka的基础管理。条条大路通罗马,只选适合当下的路。 kafka 命令这么多,怎么记得住了?我一般把命令记录到文本里,需要的时候,随时打开,ctrl c + ctrl v,用的飞起来了,我不生产代码,我只是代码的搬运工。

原创不易,请 点赞,留言,关注,转载 4暴击^^

相关推荐
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
测试19983 小时前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
小码编匠3 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#
AskHarries3 小时前
Java字节码增强库ByteBuddy
java·后端
佳佳_3 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
马剑威(威哥爱编程)4 小时前
MongoDB面试专题33道解析
数据库·mongodb·面试
许野平5 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono