__consumer_offsets - это топик, в котором Apache Kafka хранит смещения. С тех пор как Kafka перенесла хранилище смещений из Zookeeper, чтобы избежать проблем с масштабируемостью, __consumer_offsets - это единственный топик, занимающий центральное место в управлении смещениями для всех потребителей.
По умолчанию потребители не могут использовать топик __consumer_offsets, поскольку он является внутренним топиком. Поэтому перед потреблением этого топика следует установить значение exclude.internal.topics в false.
Если мы хотим использовать скрипты командной строки Kafka для потребления сообщений, мы можем использовать следующую команду
1 2 | bin/kafka-console-consumer.sh --topic __consumer_offsets --bootstrap-server localhost:9092 --formatter “kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter” --consumer.config consumer.conf --from-beginning echo "exclude.internal.topics=false" > consumer.config |
Мы не можем получить доступ к этим данным напрямую, поскольку Kafka хранит эту информацию в бинарном формате.
Для kafka 0.11.0.0 и выше
1 | $KAFKA_HOME/bin/kafka-console-consumer.sh --formatter «kafka.coordinator.group.Group.GroupMetadataManager\$OffsetsMessageFormatter» --bootstrap-server kafka:9092 --topic __consumer_offsets |
Вы должны увидеть много строк типа :
1 | [groupId,topicName,partitionNumber]::[OffsetMetadata[OffsetNumber,NO_METADATA],CommitTime 1520613132835,ExpirationTime 1520699532835]. |
реальный пример
1 | [my-group,my-topik,0]::[OffsetMetadata[13,NO_METADATA],CommitTime 1520613211176,ExpirationTime 1520699611176] |
Так что благодаря этому можно узнать, что для топика my-topic в my-group прочитано до смещения 13 на разделе 0.