Lights, Camera, Code: A Blockbuster Streaming Adventure with Golang and Kafka!
Tags: streaming, go, kafka, flink
Published: 2023-12-30 10:11:57

Welcome, movie buffs and code enthusiasts! Get ready for a cinematic experience as we embark on a thrilling adventure into the world of Golang and Kafka. Picture this: a high-tech movie studio where messages flow like scenes in a blockbuster film. Buckle up, grab your popcorn, and let the streaming show begin!


![Watching movie](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu2vsglvkuyug7mk6wy8.png)


<br>
## Setting the Scene: Golang, the Movie Maverick, and Kafka, the Blockbuster Maestro
<br>

**1. Golang, the Movie Maverick:**
Meet Golang, our movie maverick. Fast, efficient, and ready to script the perfect streaming tale. Golang is like the director ensuring our code scenes unfold seamlessly, just like the frames of your favorite movie.

**2. Kafka, the Blockbuster Maestro:**
Imagine Kafka as the mastermind behind the scenes. He's the blockbuster maestro orchestrating every twist and turn of the storyline. With Kafka, our movie script becomes a dynamic blockbuster, with messages flowing like a perfectly choreographed action sequence.
<br>
## The Script: A Streaming Blockbuster with Golang and Kafka
<br>
```go
// Roll camera! Our Golang adventure begins here.

package main

import (
	"fmt"
	"log"
	"os"
	"os/signal"
	"time"

	"github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {
	// Cue the lights! Action with Golang and Kafka!

	// Configuration for Kafka producer and consumer
	producer, err := kafka.NewProducer(&kafka.ConfigMap{"bootstrap.servers": "localhost:9092"})
	if err != nil {
		log.Fatal("Error creating Kafka producer:", err)
	}

	consumer, err := kafka.NewConsumer(&kafka.ConfigMap{
		"bootstrap.servers": "localhost:9092",
		"group.id":          "movie-group",
		"auto.offset.reset": "earliest",
	})
	if err != nil {
		log.Fatal("Error creating Kafka consumer:", err)
	}

	// Subscribe to our movie topic
	err = consumer.SubscribeTopics([]string{"blockbuster-messages"}, nil)
	if err != nil {
		log.Fatal("Error subscribing to topic:", err)
	}

	// Handling signals for a blockbuster experience
	sigchan := make(chan os.Signal, 1)
	signal.Notify(sigchan, os.Interrupt)

	// Producing a movie quote every second
	go func() {
		for {
			quote := fmt.Sprintf("Here's looking at you, kid! - %v", time.Now().Format("2006-01-02 15:04:05"))
			err := produceQuote(producer, "blockbuster-messages", quote)
			if err != nil {
				log.Println("Error producing movie quote:", err)
			}
			time.Sleep(time.Second)
		}
	}()

	// Consuming movie quotes
	run := true
	for run == true {
		select {
		case sig := <-sigchan:
			fmt.Printf("Cut! Caught signal %v: terminating\n", sig)
			run = false
		default:
			msg, err := consumer.ReadMessage(-1)
			if err == nil {
				fmt.Printf("Action! Received movie quote: %s\n", msg.Value)
			} else {
				fmt.Printf("Error reading movie quote: %v\n", err)
			}
		}
	}

	// It's a wrap! Closing the Golang movie and rolling credits
	producer.Close()
	consumer.Close()
}

// Function to produce a movie quote to Kafka
func produceQuote(producer *kafka.Producer, topic, quote string) error {
	deliveryChan := make(chan kafka.Event)
	err := producer.Produce(&kafka.Message{
		TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
		Value:          []byte(quote),
	}, deliveryChan)

	if err != nil {
		return err
	}

	e := <-deliveryChan
	m := e.(*kafka.Message)

	if m.TopicPartition.Error != nil {
		return m.TopicPartition.Error
	}

	fmt.Printf("Cinematic success! Produced movie quote to topic %s: %s\n", *m.TopicPartition.Topic, string(m.Value))
	return nil
}
```

In this blockbuster Golang and Kafka example, our movie quotes are produced and consumed in real-time, creating a dynamic and entertaining streaming experience. It's like having a front-row seat to a never-ending stream of classic movie moments.


![Output of the code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7knl0uqx85kqqxf7b3p.png)




**Conclusion:**
And that's a wrap, movie maestros and coding cinephiles! We've just witnessed the magic of Golang and Kafka turning our code into a blockbuster streaming adventure. As we continue our journey through the cinematic world of technology, stay tuned for more thrilling coding tales and exciting examples that make learning and exploring the vast sea of technology an absolute blockbuster hit! Happy coding and may your code always have a Hollywood ending! 🎬🚀