Simple Sistem Logging Terdistribusi Mengunakan Go dan Kafka

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan
Simple Sistem Logging Terdistribusi Mengunakan Go dan Kafka

Ide Aplikasi System Loging Terdistribusi


 

  • Setiap layanan dalam sistem kita akan mengirimkan log ke topik Kafka yang sama.

  • Kita bisa memiliki consumer yang berbeda untuk:

    • Menampilkan log secara real-time di dashboard.

    • Mengumpulkan log untuk analisis lebih lanjut (misalnya, menggunakan Elasticsearch).

    • Mengirimkan notifikasi jika terjadi error tertentu.




Contoh Implementasi Golang


1) Producer, untuk mempublish data ke kafka topic.

package main

import (
"fmt"
"log"

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

func main() {
// Konfigurasi producer
config := &kafka.ConfigMap{
"bootstrap.servers": "localhost:9092",
}

// Buat producer
producer, err := kafka.NewProducer(config)
if err != nil {
log.Fatalf("Failed to create producer: %s", err)
}
defer producer.Close()

// Topic yang akan digunakan
topic := "my-logs"

// Pesan yang akan dikirim
message := &kafka.Message{
Value: []byte("Hello from Golang!"),
}

// Kirim pesan
err = producer.Produce(message, nil)
if err != nil {
log.Printf("Failed to produce message: %v", err)
} else {
fmt.Printf("Produced message to topic %s\n", topic)
}
}

2) Consumer, untuk meng-konsumsi pesan dari topic kafka.

package main

import (
"fmt"
"log"

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

func main() {
// Konfigurasi consumer
config := &kafka.ConfigMap{
"bootstrap.servers": "localhost:9092",
"group.id": "my-group",
"auto.offset.reset": "earliest",
}

// Buat consumer
c, err := kafka.NewConsumer(config)
if err != nil {
log.Fatalf("Failed to create consumer: %s", err)
}
defer c.Close()

// Subscrib ke topic
err = c.Subscribe([]string{"my-logs"}, nil)
if err != nil {
log.Fatalf("Failed to subscribe: %s", err)
}

for {
msg, err := c.ReadMessage(100)
if err == nil {
fmt.Printf("Message on %s: %s\n", msg.TopicPartition, string(msg.Value))
} else {
// Handle errors
}
}
}

Penjelasan Singkat



  • Producer: Membuat pesan dan mengirimkannya ke topik yang ditentukan.

  • Consumer: Membaca pesan dari topik yang telah disubscribe.

  • Konfigurasi: Mengatur parameter seperti alamat broker, group ID, dan offset.

  • Topic: Saluran untuk mengirim dan menerima pesan.


Ide Pengembangan Lebih Lanjut



  • Schema Registry: Menggunakan schema registry untuk mendefinisikan struktur data pesan.

  • KStream: Menggunakan KStream untuk melakukan pemrosesan data secara streaming.

  • KTable: Menggunakan KTable untuk menyimpan data secara stateful.

  • Kafka Connect: Menggunakan Kafka Connect untuk menghubungkan Kafka dengan sistem lain (misalnya, database).


Catatan Penting



  • Instalasi: Pastikan Kafka dan librari Golang untuk Kafka sudah terinstal.

  • Konfigurasi: Sesuaikan konfigurasi dengan environment project Anda.

  • Error Handling: Tambahkan penanganan error yang lebih baik.

  • Best Practices: Ikuti best practices untuk penggunaan Kafka.


Baca artikel lainya :