卡夫卡消费者名单


74

我需要找出一种方法来询问Kafka主题列表。我知道我可以使用目录中kafka-topics.sh包含的脚本来做到这一点bin\。获得此列表后,每个主题都需要所有消费者。我在该目录中找不到脚本,在kafka-consumer-api库中也找不到允许我执行此操作的类。

其背后的原因是,我需要弄清楚主题的偏移量与消费者的偏移量之间的差异。

有没有办法做到这一点?还是我需要在每个消费者中实现此功能?


2
鉴于情况已发生变化,并且较新版本的Kafka中没有使用zookeeper,请考虑更改接受的答案。
灰色,

Answers:


115

使用kafka-consumer-groups.sh

例如

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

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

7
我们应该使用--zookeeper而不是--bootstrap-server
jack AKA karthik '02

1
但0.9.0.0并不是kafka的古代版本:)
jack AKA karthik

15
bin / kafka-consumer-groups.sh --list --zookeeper localhost:2181注意:这只会显示有关使用ZooKeeper的使用者的信息(而不是使用Java使用者API的使用者)。bin / kafka-consumer-groups.sh --list --bootstrap-server localhost:9092注意:这只会显示有关使用Java使用者API的使用者(非基于ZooKeeper的使用者)的信息。
Raja Krishnan

4
消费者组列表命令列出了集群中的所有消费者组,但是有没有一种方法可以显示特定主题的消费者组?
user3366706

@ user3366706kafka-consumer-groups --topic仅在提供时适用--reset-offsets,因此必须有一个不同的标志才能为“特定主题的组”创建API调用
OneCricketeer

17

您可以将其用于0.9.0.0。版本卡夫卡

./kafka-consumer-groups.sh --list --zookeeper hostname:potnumber

查看您创建的组。这将显示所有使用者组名称。

 ./kafka-consumer-groups.sh --describe --zookeeper hostname:potnumber  --describe  --group consumer_group_name

查看详情

GROUP, TOPIC, PARTITION, CURRENT OFFSET, LOG END OFFSET, LAG, OWNER

13

我意识到这个问题现在已经有将近4年的历史了。从那以后,卡夫卡发生了许多变化。上面已经提到了这一点,但仅以小写形式提及,因此我为迟到这个问题的用户写了这篇文章。

  1. 默认情况下,偏移量现在存储在Kafka主题中(不再存储在Zookeeper中),请参阅存储在Zookeeper或Kafka中的偏移量?
  2. 有一个kafka-consumer-groups实用程序,它返回所有信息,包括使用者的主题和分区的偏移量,甚至是滞后时间(注:当您询问主题的偏移量时,我假设您的意思是主题的分区)。在我的Kafka 2.0测试群集中:
kafka-consumer-groups --bootstrap-server kafka:9092 --describe
    --group console-consumer-69763 Consumer group 'console-consumer-69763' has no active members.

TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
pytest          0          5               6               1               -               -               -
``



8

每个主题的所有消费者

(替换--zookeeper--bootstrap-server以获取由较新的Kafka客户端存储的组)

获取所有按主题列出的消费者topictabconsumer

for t in `kafka-consumer-groups.sh --zookeeper <HOST>:2181 --list 2>/dev/null`; do
    echo $t | xargs -I {} sh -c "kafka-consumer-groups.sh --zookeeper <HOST>:2181 --describe --group {} 2>/dev/null | grep ^{} | awk '{print \$2\"\t\"\$1}' "
done > topic-consumer.txt

使此对唯一:

cat topic-consumer.txt | sort -u > topic-consumer-u.txt

获得所需的一个:

less topic-consumer-u.txt | grep -i <TOPIC>

1
我认为这是最接近所提问题的解决方案。这应该是公认的答案。有时您不了解消费者群体,这就是为什么您需要这个。该解决方案的唯一警告是,它不会在没有活跃消费者的消费者组中过滤掉主题。谢谢 !
纪尧姆·乔宾

4

Kafka将所有信息存储在zookeeper中。您可以在brokers-> topics下查看所有与主题相关的信息。如果您希望以编程方式获取所有主题,则可以使用Zookeeper API。

在下面的链接中详细解释了 TutorialspointZookeeper程序员指南


7
在较新版本的Kafka中,这实际上是不正确的。Zookeeper不再用于存储偏移量。该偏移量存储在卡夫卡本身特别命名的主题
Basanth罗伊

同意Basanth。但是无论如何,提供对stackoverflow的答案应该包含足够的与问题相关的有用信息,以提供最小的价值。
branko terzic

3

高级使用者已在Zookeeper中注册,因此您可以从ZK获取列表,类似于kafka-topics.sh获取主题列表的方式。我认为没有办法收集所有消费者。发送一些消费请求的任何应用程序实际上都是“消费者”,您无法确定它们是否已经完成。

在消费者方面,有一个JMX度量标准可以监视滞后时间。此外,还有用于滞后监控的Burrow


2

我没有看到它在这里被提及,但一个命令,我经常使用,可以帮助我有一个鸟瞰的所有群体,主题,分区,偏移,滞后,消费者等

kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --all-groups

示例如下:

GROUP TOPIC PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG CONSUMER-ID HOST CLIENT-ID
Group Topic 2          7               7               0   <SOME-ID>   XXXX <SOME-ID>
:
:

最重要的列是LAG,其中一个健康的平台,理想的应该是0(或接近0或高产量低数) -在任何时候。因此,请确保您对其进行监控!!!;-)。

PS:
有关如何监控滞后的有趣文章,请参见此处


1

您也可以为此使用kafkactl

# get all consumer groups (output as yaml)
kafkactl get consumer-groups -o yaml

# get only consumer groups assigned to a single topic (output as table)
kafkactl get consumer-groups --topic topic-a

样本输出(例如,yaml):

name: my-group
protocoltype: consumer
topics:
 - topic-a
 - topic-b
 - topic-c

免责声明:我是这个项目的贡献者

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.