Comment utiliser Golang et Kafka ensemble
Kafka est une file d'attente de messages distribuée open source qui est souvent utilisée pour créer des applications de traitement de flux de données en temps réel dans les applications Big Data. Golang est un langage de programmation développé par Google et est connu pour sa concurrence efficace, ses bibliothèques puissantes et son écosystème. Alors, comment utiliser Golang pour combiner avec Kafka ?
Tout d'abord, nous devons importer le package github.com/Shopify/sarama. Il s'agit d'une bibliothèque client Golang qui prend en charge Kafka. Pendant le processus d'installation, vous devez exécuter la commande suivante :
go get github.com/Shopify/sarama
Ensuite, nous devons créer un producteur. Tout d'abord, créez la configuration :
config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll config.Producer.Retry.Max = 5 config.Producer.Return.Successes = true
Ici, nous configurons le producteur pour qu'il attende tous les ACK, essaie jusqu'à 5 tentatives et renvoie un message de réussite au producteur après le succès.
Ensuite, nous devons créer une instance de producteur :
producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config) if err != nil { panic(err) } defer producer.Close()
Nous devons spécifier l'adresse d'un courtier Kafka comme point de terminaison du service pour se connecter à Kafka. Ici, nous nous connectons au serveur Kafka local. Nous appelons également la méthode .Close()
pour garantir que le producteur nettoie à sa sortie. .Close()
方法,以确保生产者退出时会清理。
现在我们已经准备好了开始向Kafka主题发布消息:
msg := &sarama.ProducerMessage{ Topic: "test", Value: sarama.StringEncoder("Hello World!"), } part, offset, err := producer.SendMessage(msg) if err != nil { fmt.Printf("Error publishing message: %v", err) } else { fmt.Printf("Message published successfully. Partition: %v, Offset: %v\n", part, offset) }
在这个例子中,我们发布了一个消息到名为“test”的主题中。如果没有错误,它会打印出成功发布的分区和偏移量。
现在我们已经创建了一个生产者,向Kafka发布了一条消息。接下来,我们来看一下如何创建一个消费者。
首先,我们需要创建消费者配置:
config := sarama.NewConfig() config.Consumer.Return.Errors = true
此处我们设定了接收错误。
接下来,我们需要创建一个消费者实例:
consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config) if err != nil { panic(err) } defer consumer.Close()
这里我们同样指定了一个Kafka broker地址。我们还需要调用.Close()
方法来确保消费者退出时会清理。
现在我们已经准备好读取Kafka主题的消息:
partitionConsumer, err := consumer.ConsumePartition("test", 0, sarama.OffsetOldest) if err != nil { panic(err) } defer partitionConsumer.Close() for { select { case msg := <-partitionConsumer.Messages(): fmt.Printf("Received message from partition %d with offset %d: %s = %s\n", msg.Partition, msg.Offset, string(msg.Key), string(msg.Value)) case err := <-partitionConsumer.Errors(): fmt.Println("Error: ", err.Error()) } }
在这个例子中,我们订阅了名为“test”的主题。然后我们读取第一个分区的偏移量。我们然后在一个循环中无限读取来自该分区的消息。循环中的select
rrreee
Dans cet exemple, nous publions un message sur le sujet nommé "test". S'il n'y a aucune erreur, il imprime la partition et le décalage publiés avec succès. 🎜🎜Maintenant, nous avons créé un producteur qui publie un message à Kafka. Voyons ensuite comment créer un consommateur. 🎜🎜Tout d'abord, nous devons créer la configuration du consommateur : 🎜rrreee🎜Ici, nous définissons l'erreur de réception. 🎜🎜Ensuite, nous devons créer une instance de consommateur : 🎜rrreee🎜Ici, nous spécifions également l'adresse d'un courtier Kafka. Nous devons également appeler la méthode.Close()
pour garantir que le consommateur nettoiera à sa sortie. 🎜🎜Nous sommes maintenant prêts à lire les messages du sujet Kafka : 🎜rrreee🎜Dans cet exemple, nous nous abonnons au sujet nommé "test". Ensuite, nous lisons le décalage de la première partition. Nous lisons ensuite les messages de cette partition à l'infini en boucle. L'instruction select
dans la boucle écoutera toujours les canaux de message et d'erreur et les imprimera respectivement. 🎜🎜Jusqu'à présent, nous avons présenté comment utiliser Golang et Kafka pour les combiner. Avec cet exemple simple, vous devriez maîtriser l'utilisation de base de Golang et Kafka. 🎜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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Cet article explique les mécanismes d'importation des packages de Go: les importations nommées (par exemple, importation & quot; fmt & quot;) et les importations vierges (par exemple, importation _ & quot; fmt & quot;). Les importations nommées rendent le contenu du package accessible, tandis que les importations vierges ne font que l'exécuter t

Cet article explique la fonction Newflash () de Beego pour le transfert de données inter-pages dans les applications Web. Il se concentre sur l'utilisation de NewFlash () pour afficher les messages temporaires (succès, erreur, avertissement) entre les contrôleurs, en tirant parti du mécanisme de session. Limiter

Cet article détaille la conversion efficace de la requête MySQL Resulte en tranches de structure GO. Il met l'accent sur l'utilisation de la méthode de numérisation de la base de données / SQL pour des performances optimales, en évitant l'analyse manuelle. Meilleures pratiques pour la cartographie des champs struct à l'aide de balises DB et de robus

Cet article montre la création de simulations et de talons dans GO pour les tests unitaires. Il met l'accent sur l'utilisation des interfaces, fournit des exemples d'implémentations simulées et discute des meilleures pratiques telles que la tenue de simulations concentrées et l'utilisation de bibliothèques d'assertion. L'articl

Cet article explore les contraintes de type personnalisé de Go pour les génériques. Il détaille comment les interfaces définissent les exigences de type minimum pour les fonctions génériques, améliorant la sécurité du type et la réutilisabilité du code. L'article discute également des limitations et des meilleures pratiques

Cet article détaille la rédaction de fichiers efficace dans GO, en comparant OS.WriteFile (adapté aux petits fichiers) avec OS.OpenFile et Buffered Writes (optimal pour les fichiers volumineux). Il met l'accent sur la gestion robuste des erreurs, l'utilisation de différer et la vérification des erreurs spécifiques.

L'article traite des tests d'unité d'écriture dans GO, couvrant les meilleures pratiques, des techniques de moquerie et des outils pour une gestion efficace des tests.

Cet article explore l'utilisation d'outils de traçage pour analyser le flux d'exécution des applications GO. Il traite des techniques d'instrumentation manuelles et automatiques, de comparaison d'outils comme Jaeger, Zipkin et OpenTelelemetry, et mettant en évidence une visualisation efficace des données
