前言
在小小的公司里,既缺巨牛,又缺物料,还缺必要的可视化管理工具。但这些不是工作路上的拦路虎;条条大路通罗马,但只选适合当下的路。面对小公司无统一的技术栈,也没有统一的管理工具,先选择最快的命令行工具,人肉手工完成相关工作。这其中就包括对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暴击^^