在上一篇文章《Linux安装Kafka》中,已经介绍了如何在Linux安装Kafka,以及Kafka的启动/关闭和创建发话题并产生消息和消费消息。这篇文章就介绍介绍Kafka的那些常用的命令。

关于Kafka的启停/创建话题/消息的产生和消费等命令在上一篇文章《Linux安装Kafka》中已经指出,这里就不说了。就说说其他常用命令。

♛ 1 查看消费者状态和消费详情

有时候我们需要关心消费者应用的状态,一般消费者应用会自己通过日志获知当前消费到了哪个topic的哪个partition的哪个offset,但当消费者出问题之后,或者出于监控的原因,我们需要知道消费者的状态和详情,那么需要借助kafka提供的相关命令。

命令格式:

bin/kafka-consumer-groups.sh --bootstrap-server BORKER_HOST1:PORT1,BORKER_HSOT2:PORT2 --list

bin/kafka-consumer-groups.sh --bootstrap-server BORKER_HOST1:PORT1,BORKER_HSOT2:PORT2 --group GROUP_NAME --describe

Tips:

  • BROKER_HOST是kafka server的ip地址,PORT是server的监听端口。多个host port之间用逗号隔开
  • 第一条命令是获取group列表,一般而言,应用是知道消费者group的,通常在应用的配置里,如果已知,该步骤可以省略
  • 第二条命令是查看具体的消费者group的详情信息,需要给出group的名称

示例:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group console-consumer-68682 --describe

效果图:

  • TOPIC:该group里消费的topic名称
  • PARTITION:分区编号
  • CURRENT-OFFSET:该分区当前消费到的offset
  • LOG-END-OFFSET:该分区当前latest offset
  • LAG:消费滞后区间,为LOG-END-OFFSET-CURRENT-OFFSET,具体大小需要看应用消费速度和生产者速度,一般过大则可能出现消费跟不上,需要引起应用注意
  • CONSUMER-ID:server端给该分区分配的consumer编号
  • HOST:消费者所在主机
  • CLIENT-ID:消费者id,一般由应用指定
♛ 2 查询topic的offset的范围

用下面命令可以查询到topic:demo broker:localhost:9092的offset的最小值:

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 -topic demo --time -2

查询offset的最大值:

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 -topic demo --time -1

效果图:

♛ 3 重置消费者offset

有些场景可能希望修改消费者消费到的offset位置,以达到重新消费,或者跳过一部分消息的目的,这时候重置offset的工具就非常实用。

命令格式:

bin/kafka-consumer-groups.sh --bootstrap-server BORKER_HOST1:PORT1,BORKER_HSOT2:PORT2 --group GROUP_NAME --reset-offsets --execute --to-offset NEW_OFFSET --topic TOPIC_NAME

bin/kafka-consumer-groups.sh --bootstrap-server BORKER_HOST1:PORT1,BORKER_HSOT2:PORT2 --group GROUP_NAME --reset-offsets --execute --to-earliest/--to-latest --topic TOPIC_NAME

Tips:

  • BROKER_HOST是kafka server的ip地址,PORT是server的监听端口。多个host port之间用逗号隔开
  • 第一条命令是将指定GROUP_NAME和topic的offset修改到NEW_OFFSET的位置,重启消费者后,消费中将从指定的offset处消费。注意这里只能NEW_OFFSET只能设置一个值,也就是说,所有的分区都将使用这个值,如果分区消息负载不均衡,需要考虑是否适用。
  • 第二条命令是将指定GROUP_NAME和topic的offset修改到earliest或者latest位置,使得消费者从头或者从尾部消费。

示例:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group console-consumer-68682 --reset-offsets --execute --to-offset 3 --topic demo

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group console-consumer-68682 --reset-offsets --execute --to-latest --topic demo

效果图:

可以通过直接更换消费者group id的方式,配合消费者默认的消费策略,可以达到类似的效果,反而更加简单、高效和安全。

♛ 4 查看topic的状态和分区负载详情

当broker出现宕机,恢复之后,我们可以看下topic的leader是否负载均衡。因为kafka的所有读写消息的请求,都是发送到partition leader上的,因此在生产环境,负载均衡显得尤其重要。

命令格式:

bin/kafka-topics.sh --zookeeper ZOOKEEPER_HOST1:PORT1,ZOOKEEPER_HOST2:PORT2 --describe --topic TOPIC_NAME

Tips:

  • ZOOKEEPER_HOST是kafka所使用的zookeeper的ip地址,PORT是zookeeper监听的端口。多个host port之间用逗号隔开
  • 类似的,zookeeper集群不需要全部列上,给出一个可用的zk地址和端口即可

示例:

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic demo

效果图:

如果发现以下现象说明kafka异常:

  • 某个topic的每个分区,同步副本数量和设定的副本数量不一致
  • 某个topic的每个分区,leader的id数值是-1或者none
♛ 5 消费消息

从头开始消费:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo --from-beginning

效果图:

从尾部开始:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo --offset latest --partition 0

效果图:

指定分区:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo --offset latest --partition 0

取指定个数:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo --offset latest --partition 0 --max-messages 2

如示例部分,取2个消息,取完自动结束回话。

♛ 自带压测工具

测试使用Kafka自带的测试脚本,通过命令对Kafka发起写入MQ消息和Kafka消费MQ消息的请求。模拟不同数量级的MQ消息写入和MQ消息消费场景,根据Kafka的处理结果,评估Kafka是否满足处理亿级以上的消息的能力。

命令格式:

bin/kafka-producer-perf-test.sh --topic demo --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092

示例:

测试项 压测消息数(单位:W)  测试命令
写入MQ消息 10 

bin/kafka-producer-perf-test.sh --topic demo --num-records 100000 --record-size 1000  --throughput 2000 --producer-props bootstrap.servers=localhost:9092

  100 

bin/kafka-producer-perf-test.sh --topic demo --num-records 1000000 --record-size 2000  --throughput 5000 --producer-props bootstrap.servers=localhost:9092

  1000

bin/kafka-producer-perf-test.sh --topic demo --num-records 10000000 --record-size 2000  --throughput 5000 --producer-props bootstrap.servers=localhost:9092

消费MQ消息 10 

bin/kafka-consumer-perf-test.sh --broker-list localhost:9092 --topic demo --fetch-size 1048576 --messages 100000 --threads 1

  100 

bin/kafka-consumer-perf-test.sh --broker-list localhost:9092 --topic demo --fetch-size 1048576 --messages 1000000 --threads 1

  1000 

bin/kafka-consumer-perf-test.sh --broker-list localhost:9092 --topic demo --fetch-size 1048576 --messages 10000000 --threads 1

本文中部分内容翻译或借鉴于以下学习资料,特别鸣谢:

作  者:请叫我头头哥

出  处:http://www.cnblogs.com/toutou/

关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!

Kafka常用命令合集的更多相关文章

  1. Linux常用命令合集

    常用命令合集 命令选项和参数 Linux中的命令格式为:command [options] [arguments]  //中括号表示可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个 ...

  2. git常用命令合集(持续完善)

    git常用命令合集(持续更新,仅为便于查阅) 上传整个项目 git init git add 项目名 git commit -m "提交的注释信息" 若已经绑定远程仓库,则直接:g ...

  3. Linux操作系统常用命令合集——第一篇-文件和目录操作(40个命令)

    一.选项和参数的区别        在经过上一次的系统安装后我们已经成功登陆,登陆LInux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着“选项”(英文名:options)或“参数” ...

  4. Linux常用命令合集(一)

    1.处理目录的常用命令: ls(英文全拼:list files): 列出目录及文件名 cd(英文全拼:change directory):切换目录 pwd(英文全拼:print work direct ...

  5. Linux操作系统常用命令合集——第六篇-软件包操作(2个命令)

    一.前言介绍 软件包即程序包 程序包管理 关键词:rpm程序包管理.YUM仓库管理.源码编译安装 程序包管理: 将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装. ...

  6. Linux操作系统常用命令合集——第六篇-压缩和归档操作(16个命令)

    1.gzip [命令作用] 压缩和解压缩文件 gzip/guzip/zcat zcat:不显式展开的前提下查看文本文件内容 zdiff/zgrep/zless/zmore [命令语法]  gzip   ...

  7. Linux操作系统常用命令合集——第五篇-磁盘和文件系统操作(15个命令)

    1.fdisk [命令作用] 用于观察硬盘实体使用情况.也可以对硬盘分区. 对于一块硬盘来讲,最多只能管理15个分区 [命令语法]  fidisk    [选项]    [参数] [常用选项] -b& ...

  8. Linux操作系统常用命令合集——第四篇-文件系统权限操作(5个命令)

    1.umask [命令作用] 文件或目录创建时的遮罩码 [命令语法] umask     [选项]    [参数] [常用选项] -p  --输出的权限掩码可直接作为指令来执行 -s  --以符号方式 ...

  9. Linux操作系统常用命令合集——第三篇-系统管理操作(25个命令)

    1.whoami [命令作用] 显示当前登录有效用户名称 [命令语法]  whoami    [选项] [常用选项] 无 [参数说明] 用户名称 [命令示例] 显示当前登录有效用户名称 # whoam ...

随机推荐

  1. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(三)

      (六)工程结构 (一)应用分层 1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推:  开放接口层: ...

  2. C#开发BIMFACE系列13 服务端API之获取转换状态

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列12 服务端API之文件转换>中详细介绍了7种文件转换的方法.发起源文件/模型转换后,转换过程可能成功 ...

  3. java设计模式7.策略模式、模板方法模式、观察者模式

    策略模式 策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 环境角色:持有一个抽象策略角色的引用. 抽象策略 ...

  4. Python 基础(四)

    open函数 open(name[,mode[,buffering[,encoding]]]) mode(访问模式): -1 : r(只读) w(只写,若文件存在则覆盖) a(追加) rb(二进制只读 ...

  5. HDU 5919 - Sequence II (2016CCPC长春) 主席树 (区间第K小+区间不同值个数)

    HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2 ...

  6. Covered Points Count CF1000C 思维 前缀和 贪心

     Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  7. codeforces 798 C. Mike and gcd problem(贪心+思维+数论)

    题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...

  8. poj 2253 Frogger(floyd变形)

    题目链接:http://poj.org/problem?id=1797 题意:给出两只青蛙的坐标A.B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的.显然从A到B存在至少一条的通路,每一条通路 ...

  9. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(3)-项目依赖注入

    简介 依赖注入主要是一种结构性的模式,注重的是类与类之间的结构,它要达到的目的就是设计原则中最少知道和合成复用的原则,减少内部依赖,履行单一职责,最终就是强解耦.依赖注入目前最好的实现就是依赖注入容器 ...

  10. Webpack安装配置及打包详细过程

    引言 前端经过漫长的发展,涌现出了很多实践方法来处理复杂的工作流程,让开发变得更加简便,其中,模块化可以使复杂的程序细化成为各个小的文件,而webpack并不强制你使用某种模块化方案,而是通过兼容所有 ...