环境说明:

   我们的kafka版本是:查看kafka版本,进入kafka容器:find / -name \*kafka_\* | head -1 | grep -o '\kafka[^\n]*'

        kafka_2.11-2.2.1

       前面为scala版本,后面为kafka版本。
       样例说明:2.11为scala版本,2.2.1为kafka版本。

    我的kafka容器名是 kafka;

注意:

     不同kafka版本的命令有些不一样,有的还用zookeeper的那种命令,注意下就可以了;

 

命令整理:

进入kafka容器

docker exec -it kafka /bin/bash

也可以这样

docker exec -it kafka bash

进入kafka默认目录

cd /opt/kafka

我们的目录是在这里:

一般常用的操作就是这些bin目录下的命令了;

 

 

问题整理:

问题一:

在项目开发过程中,测试环境的kafka是可以被其他人消费的,包括我本地启动服务也是可以消费的。

这样在测试过程中,就不能保证消息被测试环境的服务消费了,

若是其他人的分支和测试环境分支代码不一致,他们消费后就会导致功能最后的结果不是我们想要的,

所以就需要找到是谁消费了这个消息【具体是哪个同学的ip】;

因此需要用到kafka中bin目录下的一些命令:

 

我的查找过程:因为我们是运行在docker中的,因此同一个命令有两种查询方式

【查看group列表】

docker exec -it kafka kafka-consumer-groups.sh --bootstrap-server XXXXXX:9092 --list

或者进去kafka的bin目录,直接用命令操作

docker exec -it kafka bash
cd /opt/bitnami/kafka/bin/
./kafka-consumer-groups.sh --bootstrap-server XXXXXX:9092 --list

      结果就是会列出所有的组,这里要看你们代码中用到哪个组,

     yml文件中:kafka:consumer:group-id:组名字

【查看group消费情况】

docker exec -it kafka kafka-consumer-groups.sh --bootstrap-server XXXXX:9092 --group group名字 --describe

或者进去kafka的bin目录,直接用命令操作

docker exec -it kafka bash
cd /opt/bitnami/kafka/bin/
./kafka-consumer-groups.sh --bootstrap-server XXXXXX:9092 --group group名字 --describe


最后结果
GROUP            TOPIC                PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                         HOST            CLIENT-ID
                                                   当前已消费的条数   总条数           未消费的条数
4 kzy-record-group wecom-chat-message-1 1          61              61              0               BATCH_CLIENT_1-82ec8469-0486-4aab-bf26-9c2a7dc10127 /xxx.xxx.xxx.x  BATCH_CLIENT_1
5 kzy-record-group wecom-chat-message-1 3          115             115             0               BATCH_CLIENT_3-2952df8e-7dbe-4aa8-9133-d60963cd8707 /xxx.xxx.xxx.x  BATCH_CLIENT_3
6 kzy-record-group wecom-chat-message-1 0          123             123             0               BATCH_CLIENT_0-f4f72233-dc0f-4e6c-80db-701fab3254e1 /xxx.xxx.xxx.x  BATCH_CLIENT_0
7 kzy-record-group wecom-chat-message-1 2          148             148             0               BATCH_CLIENT_2-cb93e139-c3c3-4727-8156-dff1b95d0f56 /xxx.xxx.xxx.x  BATCH_CLIENT_2

  最后出来host列就会指向当前消费者的ip(当前消费的group成员id),我们的目的就达到了;

   组的这两个命令其实也就是--list 和--describe这两个参数的运用;

 

当然还有其他命令,个人觉得这些没必要记,用的时候再百度,或者收藏我的文章(会不定期更新)上来看看就行了。

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐