Maison  >  Article  >  développement back-end  >  **Comment obtenir des compensations de groupe de consommateurs dans Golang Kafka 10 ?**

**Comment obtenir des compensations de groupe de consommateurs dans Golang Kafka 10 ?**

DDD
DDDoriginal
2024-10-25 10:51:02935parcourir

**How to Get Consumer Group Offsets in Golang Kafka 10?**

Obtention de compensations de groupes de consommateurs dans Golang Kafka 10

Avec l'introduction de la prise en charge des groupes de consommateurs dans la bibliothèque Kafka de Golang (Sarama) dans Kafka 10, les développeurs ont désormais accès aux fonctionnalités liées aux groupes de consommateurs sans recourir à des bibliothèques externes. Une tâche courante consiste à récupérer le décalage du message en cours de traitement par un groupe de consommateurs. Auparavant, cela nécessitait l'utilisation de solutions basées sur Zookeeper, telles que Kazoo-go. Désormais, avec Sarama-cluster, cela peut être réalisé grâce au code suivant :

<code class="go">package main

import (
    "context"
    "log"
    "strings"

    "github.com/Shopify/sarama"
)

func main() {
    groupName := "testgrp"
    topic := "topic_name"
    offset, err := GetCGOffset(context.Background(), "localhost:9092", groupName, topic)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Consumer group %s offset for topic %s is: %d", groupName, topic, offset)
}

type gcInfo struct {
    offset int64
}

func (g *gcInfo) Setup(sarama.ConsumerGroupSession) error {
    return nil
}

func (g *gcInfo) Cleanup(sarama.ConsumerGroupSession) error {
    return nil
}

func (g *gcInfo) ConsumeClaim(_ sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
    g.offset = claim.InitialOffset()
    return nil
}

func GetCGOffset(ctx context.Context, brokers, groupName, topic string) (int64, error) {
    config := sarama.NewConfig()
    config.Consumer.Offsets.AutoCommit.Enable = false // we're not going to update the consumer group offsets
    client, err := sarama.NewConsumerGroup(strings.Split(brokers, ","), groupName, config)
    if err != nil {
        return 0, err
    }
    info := gcInfo{}
    if err := client.Consume(ctx, []string{topic}, &info); err != nil {
        return 0, err
    }
    return info.offset, nil
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn