github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/kafka/kafka.docker.go (about)

     1  package kafka
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  	"os/exec"
     7  )
     8  
     9  func StartKafka() {
    10  	os.Setenv("KAFKA_BROKERS", "localhost:9092")
    11  	// not working
    12  	// using apache kafka 3.7.0
    13  	// startKafkaCmd := exec.Command("docker", "run", "-d", "-p", "9092:9092", "--name", "kafka", "apache/kafka:3.7.0")
    14  	// startKafkaCmd.Stdout = os.Stdout
    15  	// startKafkaCmd.Stderr = os.Stderr
    16  	// if err := startKafkaCmd.Run(); err != nil {
    17  	// 	StopKafka()
    18  	// 	log.Fatalf("Error starting Kafka: %v", err)
    19  	// 	StopKafka()
    20  	// 	os.Exit(1)
    21  	// }
    22  
    23  	// os.Setenv("KAFKA_BROKERS", "localhost:9092,localhost:9094,localhost:9095")
    24  
    25  	// Start Zookeeper
    26  	startZookeeperCmd := exec.Command("docker", "run", "-d", "--rm", "-e", "ZOOKEEPER_CLIENT_PORT=2181", "-p", "2181:2181", "--name", "zookeeper", "confluentinc/cp-zookeeper:latest")
    27  	startZookeeperCmd.Stdout = os.Stdout
    28  	startZookeeperCmd.Stderr = os.Stderr
    29  	if err := startZookeeperCmd.Run(); err != nil {
    30  		StopKafka()
    31  		log.Fatalf("Error starting Zookeeper: %v", err)
    32  		os.Exit(1)
    33  	}
    34  
    35  	// Start Kafka
    36  	startKafkaCmd := exec.Command("docker", "run", "-d", "--rm", "-p", "9092:9092", "--name", "kafka", "--link", "zookeeper", "-e", "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092", "-e", "KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092", "-e", "KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181", "-e", "KAFKA_AUTO_CREATE_TOPICS_ENABLE=false", "-e", "KAFKA_DELETE_TOPIC_ENABLE=true", "confluentinc/cp-kafka:latest")
    37  	startKafkaCmd.Stdout = os.Stdout
    38  	startKafkaCmd.Stderr = os.Stderr
    39  	if err := startKafkaCmd.Run(); err != nil {
    40  		StopKafka()
    41  		log.Fatalf("Error starting Kafka: %v", err)
    42  		StopKafka()
    43  		os.Exit(1)
    44  	}
    45  
    46  	// Define the command to start Kafka brokers.
    47  	// startKafkaCmd := exec.Command("docker", "run", "-d",
    48  	// 	"-p", "9092:9092",
    49  	// 	"--name", "kafka1",
    50  	// 	"--link", "zookeeper",
    51  	// 	"-e", "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092",
    52  	// 	"-e", "KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092",
    53  	// 	"-e", "KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181",
    54  	// 	"-e", "KAFKA_AUTO_CREATE_TOPICS_ENABLE=true",
    55  	// 	"-e", "KAFKA_DELETE_TOPIC_ENABLE=true",
    56  	// 	"confluentinc/cp-kafka:latest",
    57  	// )
    58  	// startKafkaCmd.Stdout = os.Stdout
    59  	// startKafkaCmd.Stderr = os.Stderr
    60  
    61  	// // Start the first Kafka broker.
    62  	// if err := startKafkaCmd.Run(); err != nil {
    63  	// 	log.Fatalf("Error starting Kafka broker 1: %v", err)
    64  	// }
    65  
    66  	// // Start additional Kafka brokers (modify as needed).
    67  	// for i := 2; i <= 3; i++ {
    68  	// 	// Incremental changes to avoid conflicts between Kafka brokers.
    69  	// 	port := 9092 + i
    70  	// 	containerName := "kafka" + strconv.Itoa(i)
    71  
    72  	// 	// Define the command for each additional Kafka broker.
    73  	// 	startKafkaCmd := exec.Command("docker", "run", "-d",
    74  	// 		"-p", fmt.Sprintf("%d:9092", port),
    75  	// 		"--name", containerName,
    76  	// 		"--link", "zookeeper",
    77  	// 		"-e", "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092",
    78  	// 		"-e", "KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092",
    79  	// 		"-e", "KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181",
    80  	// 		"-e", "KAFKA_AUTO_CREATE_TOPICS_ENABLE=true",
    81  	// 		"-e", "KAFKA_DELETE_TOPIC_ENABLE=true",
    82  	// 		"confluentinc/cp-kafka:latest",
    83  	// 	)
    84  	// 	startKafkaCmd.Stdout = os.Stdout
    85  	// 	startKafkaCmd.Stderr = os.Stderr
    86  
    87  	// 	// Start the additional Kafka broker.
    88  	// 	if err := startKafkaCmd.Run(); err != nil {
    89  	// 		log.Fatalf("Error starting Kafka broker %d: %v", i, err)
    90  	// 	}
    91  	// }
    92  }
    93  
    94  func StopKafka() {
    95  	stopKafkaCmd := exec.Command("docker", "stop", "kafka")
    96  	stopKafkaCmd.Stdout = os.Stdout
    97  	stopKafkaCmd.Stderr = os.Stderr
    98  	if err := stopKafkaCmd.Run(); err != nil {
    99  		log.Fatalf("Error stopping Kafka: %v", err)
   100  		// os.Exit(1)
   101  	}
   102  
   103  	// stopZookeeperCmd := exec.Command("docker", "stop", "zookeeper")
   104  	// stopZookeeperCmd.Stdout = os.Stdout
   105  	// stopZookeeperCmd.Stderr = os.Stderr
   106  	// if err := stopZookeeperCmd.Run(); err != nil {
   107  	// 	log.Fatalf("Error stopping Zookeeper: %v", err)
   108  	// 	// os.Exit(1)
   109  	// }
   110  
   111  	// rmKafkaCmd := exec.Command("docker", "rm", "kafka")
   112  	// rmKafkaCmd.Stdout = os.Stdout
   113  	// rmKafkaCmd.Stderr = os.Stderr
   114  	// if err := stopKafkaCmd.Run(); err != nil {
   115  	// 	log.Fatalf("Error removing Kafka: %v", err)
   116  	// 	// os.Exit(1)
   117  	// }
   118  
   119  	// rmZookeeperCmd := exec.Command("docker", "rm", "zookeeper")
   120  	// rmZookeeperCmd.Stdout = os.Stdout
   121  	// rmZookeeperCmd.Stderr = os.Stderr
   122  	// if err := stopZookeeperCmd.Run(); err != nil {
   123  	// 	log.Fatalf("Error removing Zookeeper: %v", err)
   124  	// 	// os.Exit(1)
   125  	// }
   126  }