Kafka Verbraucherliste

74

Ich muss einen Weg finden, Kafka nach einer Liste von Themen zu fragen. Ich weiß, dass ich das mit dem kafka-topics.shim bin\Verzeichnis enthaltenen Skript tun kann . Sobald ich diese Liste habe, brauche ich alle Verbraucher pro Thema. Ich konnte weder ein Skript in diesem Verzeichnis noch eine Klasse in der kafka-consumer-apiBibliothek finden, die es mir ermöglicht, dies zu tun.

Der Grund dafür ist, dass ich den Unterschied zwischen dem Offset des Themas und den Offsets der Verbraucher herausfinden muss.

Gibt es einen Weg, dies zu erreichen? Oder muss ich diese Funktionalität in jedem meiner Verbraucher implementieren?

Tavo
quelle
2
Bitte erwägen Sie, die akzeptierte Antwort zu ändern, da sich die Dinge geändert haben und zookeeper in neueren Versionen von Kafka nicht verwendet wird.
Gray

Antworten:

115

Verwenden Sie kafka-consumer-groups.sh

Zum Beispiel

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

bin/kafka-consumer-groups.sh --describe --group mygroup --bootstrap-server localhost:9092
Basanth Roy
quelle
7
wir sollten --zookeeper nicht --bootstrap-server
jack AKA karthik
1
aber 0.9.0.0 ist keine alte Version von Kafka :)
Jack AKA Karthik
15
bin / kafka-consumer-groups.sh --list --zookeeper localhost: 2181 Hinweis: Hier werden nur Informationen zu Verbrauchern angezeigt, die ZooKeeper verwenden (nicht diejenigen, die die Java-Verbraucher-API verwenden). bin / kafka-consumer-groups.sh --list --bootstrap-server localhost: 9092 Hinweis: Hier werden nur Informationen zu Verbrauchern angezeigt, die die Java-Verbraucher-API verwenden (nicht auf ZooKeeper basierende Verbraucher).
Raja Krishnan
4
Der Befehl "Verbrauchergruppenliste" listet alle Verbrauchergruppen im Cluster auf. Gibt es jedoch eine Möglichkeit, Verbrauchergruppen für ein bestimmtes Thema anzuzeigen?
user3366706
@ user3366706 kafka-consumer-groups --topicgilt nur für die Bereitstellung --reset-offsets, daher müsste es ein anderes Flag geben, um einen API-Aufruf für "Gruppen für ein bestimmtes Thema" zu erstellen
OneCricketeer
17

Sie können dies für 0.9.0.0 verwenden. Version Kafka

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

um die von Ihnen erstellten Gruppen anzuzeigen. Dadurch werden alle Namen der Verbrauchergruppen angezeigt.

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

Details anzeigen

GROUP, TOPIC, PARTITION, CURRENT OFFSET, LOG END OFFSET, LAG, OWNER
Jack AKA Karthik
quelle
13

Mir ist klar, dass diese Frage jetzt fast 4 Jahre alt ist. Seitdem hat sich in Kafka viel geändert. Dies ist oben erwähnt, aber nur in kleinem Druck, daher schreibe ich dies für Benutzer, die so spät wie ich über diese Frage stolpern.

  1. Offsets werden jetzt standardmäßig in einem Kafka-Thema gespeichert (nicht mehr in Zookeeper), siehe In Zookeeper oder Kafka gespeicherte Offsets?
  2. Es gibt ein Dienstprogramm für kafka-consumer-groups, das alle Informationen zurückgibt, einschließlich des Versatzes des Themas und der Partition, des Verbrauchers und sogar der Verzögerung (Anmerkung: Wenn Sie nach dem Versatz des Themas fragen, gehe ich davon aus, dass Sie die Offsets von meinen die Partitionen des Themas). In meinem Kafka 2.0-Testcluster:
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               -               -               -
``


ynux
quelle
8

Alle Verbraucher pro Thema

(Ersetzen --zookeeperdurch --bootstrap-server, um Gruppen von neueren Kafka-Clients zu speichern.)

Holen Sie sich alle Verbraucher pro Thema als Tabelle mit 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

Machen Sie diese Paare einzigartig:

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

Holen Sie sich das gewünschte:

less topic-consumer-u.txt | grep -i <TOPIC>
egor7
quelle
1
Ich denke, dies ist die naheliegendste Lösung für die gestellte Frage. Dies sollte die akzeptierte Antwort sein. Manchmal kennt man die Verbrauchergruppen nicht und deshalb braucht man das. Die einzige Einschränkung bei dieser Lösung besteht darin, dass keine Themen in einer Verbrauchergruppe herausgefiltert werden, in der es keine aktiven Verbraucher gibt. Vielen Dank !
Guillaume Jobin
4

Kafka speichert alle Informationen im Zookeeper. Sie finden alle themenbezogenen Informationen unter Broker-> Themen . Wenn Sie alle Themen programmgesteuert abrufen möchten, können Sie dies mithilfe der Zookeeper-API tun.

Es wird ausführlich in den folgenden Links erklärt. Tutorialspoint , Zookeeper Programmer-Handbuch

Prasad
quelle
7
Dies ist in den neueren Versionen von Kafka tatsächlich falsch. Zookeeper wird nicht mehr zum Speichern von Offsets verwendet. Die Offsets werden in Kafka selbst in speziell genannten Themen gespeichert
Basanth Roy
Stimmen Sie mit Basanth überein. Auf jeden Fall sollte die Beantwortung des Stapelüberlaufs genügend fragenbezogene und nützliche Informationen enthalten, um einen minimalen Wert bereitzustellen.
Branko Terzic
3

Hochrangige Verbraucher sind bei Zookeeper registriert, sodass Sie eine Liste von ZK abrufen können, ähnlich wie beim Abrufen kafka-topics.shder Themenliste. Ich glaube nicht, dass es eine Möglichkeit gibt, alle Verbraucher zu sammeln . Jede Anwendung, die einige Verbrauchsanforderungen sendet, ist tatsächlich ein "Verbraucher", und Sie können nicht feststellen, ob sie bereits ausgeführt wurden.

Auf der Verbraucherseite gibt es eine JMX-Metrik zur Überwachung der Verzögerung . Es gibt auch einen Bau für die Verzögerungsüberwachung.

Sandris
quelle
2

Ich sehe es hier nicht erwähnt, aber einen Befehl, den ich oft benutze und der mir hilft, alle Gruppen, Themen, Partitionen, Offsets, Verzögerungen, Verbraucher usw. Aus der Vogelperspektive zu betrachten

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

Ein Beispiel würde so aussehen:

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>
:
:

Die wichtigste Säule ist die LAG, wo für eine gesunde Plattform, idealerweise sollte es sein 0(oder näher zu 0 oder eine geringe Anzahl für einen hohen Durchsatz) - zu allen Zeiten. Also stellen Sie sicher, dass Sie es überwachen !!! ;-).

PS:
Einen interessanten Artikel darüber, wie Sie die Verzögerung überwachen können, finden Sie hier .

jump_monkey
quelle
1

Sie können auch kafkactl dafür verwenden:

# 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

Beispielausgabe (zB als Yaml):

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

Haftungsausschluss: Ich bin an diesem Projekt beteiligt

Dolch
quelle