Kafka控制台常用命令及工作流程简单介绍

前言

在使用kafak之前,先启动每个node 的zookeeper服务:
zkServer.sh start

一、kafka常用命令

1、启动服务
kafka-server-start.sh -daemon /soft/kafka/config/server.properties

2、查看主题
kafka-topics.sh --list --zookeeper s102:2181
pic1
3、查看某个主题详细信息
kafka-topics.sh --describe --zookeeper s102:2181 --topic test1
pic2
4、创建主题
kafka-topics.sh --create --zookeeper s102:2181 --replication-factor 1 --partitions 1 --topic test

5、修改partitions个数
kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 4

6、删除主题
topicbin/kafka-topics.sh --delete –zookeeper s102:2181 --topic test
注:同时要删除该主题的数据 重新启动kafka
7、创建控制台生产者

kafka-console-producer.sh --broker-list s102:9092,s103:9020 --topic test1
# --key-serializer CLASSNAME 指定消息键的编码器类名
# --value-serializer CLASSNAME 指定消息值的编码器类名
# --compression-codec STRING 指定生成消息所使用的压缩类型,可以是none,gzip,snappy或lz4,默认为gzip
# --sync 指定以同步的方式生成消息
# 默认的命令行消息读取器是kafka.tools.LineMessageReader,其有一些非常有用的参数,
# 可以通过–property将这些消息传给控制台生产者:
# ignore.error 如果被设置为false,那么在parse.key被设为true或者标准输入里没有包含键的分隔符时就会抛出异常,默认为true
# parse.key 如果被设为false,那么生成消息的键总是null,默认为true
# key.separator 指定消息键和消息值之间的分隔符,默认是Tab字符

8、创建控制台消费者
kafka-console-consumer.sh --zookeeper s102:2181 --topic test1 --from-beginning
# 这里topic,whitelist和blacklist三个参数默认只能选择一个
# --whitelist 指定白名单
# --blacklist 指定黑名单
# 指定消费者的其他参数信息
# --consumer.config CONFIGFILE 通过配置文件的方式指定其他参数信息
# --consumer-property KEY=VALUE 通过键值对的形式传递参数,多个则以逗号隔开
# 消息格式化器除了默认的还有三种
# kafka.tools.LoggingMessageFormatter 将日志输出到日志中,日志级别为INFO
# kafka.tools.ChecksumMessageFormatter 只打印消息的校验和
# kafka.tools.NoOpMessageFromatter 读取消息但不进行任何打印
# 对于标准格式化器,其有一些非常有用的配置项,可以通过–property命令行参数传递给它
# print.timestamp 打印每个消息的时间戳
# print.key 如果被设为true,除了打印消息的值外,还会打印消息的键
# key.separator 打印消息的键和值所使用的分隔符
# line.separator 指定消息之间的分隔符
# key.deserializer 指定打印消息的键所使用的反序列化类名
# value.deserializer 指定打印消息的值所使用的反序列化类名
# --formatter CLASSNAME 指定消息格式化器的类名,用于解码消息,默kafka.tools.DefaultFormatter
# --from-beginning 指定从最旧的消息开始读取数据
# --max-messages NUM 指定在退出之前最多读取NUM个消息
# --partition NUM 指定只读取ID为NUM的分区

9、查看消费者组
kafka-consumer-groups.sh --zookeeper s102:2181,s103:2181 –list
kafka-consumer-groups.sh --bootstrap-server --list (新版命令)

10、查看消费值组信息
kafka-consumer-groups.sh --bootstrap-server s102:9092 --describe --group test1group
pic3
# TOPIC:表示该消费者组消费了哪些topic。
# PARTITION:表示该消费者组消费的是哪个分区。
# LOG-END-OFFSET:表示topic所有分区当前的日志终端位移值。
# LAG:表示消费滞后进度,该值等于 LOG-END-OFFSET 与 CURRENT-OFFSET 的差值,通常都是大于或等于0的正数。若该值接近 LOG-END-OFFSET 则表明该消费者组消费滞后严重,0表示不存在消费滞后的情况,若小于0,则通常表明存在消费数据丢失的情况,即有些消息未被消费就被consumer直接跳过了。若出现这种情况,我们需要确认broker端参数unclean.leader.election.en-able的值是否被设置成了true,并进一步研究是否有可能出现了因 unclean 领导者选举而造成的数据丢失。
# CONSUMER-ID:表示consumer的ID,通常是Kafka自动生成的。
# HOST:表示consumer所在的broker主机信息。
# CLIENT-ID:表示用户指定或系统自动生成的一个标识consumer所在客户端的ID,该ID通常用于定位和调试问题。

11、创建消费者组
kafka-console-consumer.sh --bootstrap-server s102:9092 --topic test1 --group test1group
注:运行几次就会创建几个消费者

12、查看消息信息
kafka-run-class.sh kafka.tools.DumpLogSegments --files /path/to/00000000000000000000.log --print-data-log

13、查看topic的partition数据量
kafka-run-class.sh kafka.tools.GetOffsetShell --topic xxxx --time -1 --broker-list s102:9092 --partitions 0

二、producer、consumer、consumer group、topic、partition之间的关系

kafka拓扑图
1、首先搭建了zookeeper集群和kafka集群。

2、kafka创建了3个topic。

3、topic1有3个partition,topic2有两个partition,topic3有1个partition,当然还有replications,这个暂时忽略,之后再详细讲述。这些topic的partion会均布在3个broker上。

4、现在有3个producers,分别往3个broker中发送messages,broker根据每条message(topic,key,value)中的内容将该message追加到对应topic中的partition中,该写入是顺序写磁盘(顺序写磁盘效率比随机写要高,保障kafka吞吐率,在读取使用的时候读取速度也会更快)。这就保证了单个partition中的信息是有序的。

5、consumer group中的consumers会从对应的partion中pull data,同一个consumer group 可以消费多个topic,因此一个consumer也可以对应多个topic,同时可以对一个topic的多个partitions,但是一个partition只可以被同一个consumer group中的某一个consumer消费消费。

三、设定数据保存时间

kafka数据有效期分为全局和主题级别的设定。
1、全局生效
该方式需要修改server.properties
添加或修改
log.retention.hours=24 (配置该参数即可,示例为24h 即一天)
log.cleanup.policy=delete (默认,可不配置)

然后重新启动broker

2、topic 级别

./kafka-configs.sh --zookeeper 192.168.1.1:2181 --alter --entity-name sg_topic–entity-type topics --add-config retention.ms=86400000
该方式不需要重新启动broker

kafak 数据存储再segment中,其大小由参数设定,如下
log.segment.bytes=1073741824 【1GB】
当该文件的产生时间大于 设定的过期时间时又可能被删除,之所以说又可能 是因为kafka 会至少保留一个segment文件。即使该文件超过过期时间也不会被删除 直到生成新的segement文件之后,被删除线程扫描到为止。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值